"Firefox 2.0 Released!!".javaScript(1.7)2006年10月26日 17時26分16秒

タイトルは別におちょくっているわけではない。w

というわけで早速入れてみた>Firefox 2.0。まぁ、β版から積極的に使ってみることをしないだとか、Windows 版しか入れてないとかいう辺り、チキン呼ばわりされても仕方ないわけだが。

で、外見なんて大して変わって無いじゃん (アイコン類はきっとお金がかかってるんだろうなぁ…) とか、やたらと新しいウィンドウを浮かべようとするリンクばかりのエロサイトwを試して見たりとか、インラインスペルチェックを華麗に脳内スルーしてみたりとか、まぁいろいろあるわけだが、個人的な関心事としては、やっぱり今回新たに実装された JavaScript 1.7 だったりするわけですわ。

で、とりあえずMDC とか覗いてみたりするわけだが。

うう~ん、途中までしか訳されてないし。。。(^_^;

まぁ情報としては以下のサイトさんが結構詳しいんではないかと思いまふ (結局 Google 頼みw)。

同じアサブロ内にこんなスバラすぃサイト様が存在していたとゎ。

以下、個人的咀嚼結果メモ。。。

  • 識別子の扱い ...子孫アクセス演算子なんてものが存在していることを今初めて知った (そこかよw)。つか、Perl で慣れちゃっているおいらとしては、JavaScript ってこんなに不便な言語だったのかという感触。。。いや、そういえば確かに不便だったw まぁこれからも当分は不便な生活が強いられるわけだが。
  • ブロックスコープ ...// undefined とコメントされている箇所は、本当に undefined になっちゃうのか? さすがに、上位スコープに同名の変数が定義されていれば、そいつがそのまま有効だと思うんだが。。。しかしこれで JavaScript は、少なくともおいらの中では晴れて PHP よりはマシな言語になったわけだ。いやそれは元からか。w
    ところで let宣言によってブロックスコープ中に定義した変数は静的スコープを持つの? それとも動的スコープ? MDC 読んでもよーわからんかった。後で試してみよう。。。
  • 分割代入 ...よーするに Perl で言うところのリスト代入みたいなものだな。配列リテラル形式なんてまさにそれだし、
    // JavaScript
    var [x, y, z] = [2, 3, 5];
    document.writeln("<p>(x, y, z) = (" + x + ", " + y + ", " + z + ")</p>");
    
    # Perl
    my ($x, $y, $z) = (2, 3, 5);
    print "<p>(x, y, z) = ($x, $y, $z)</p>\n";
    
    オブジェクトリテラル形式はハッシュのスライスを代入するみたいなもんだし。
    // JavaScript
    with (rect){
        left = 0; top = 5; right = 10; bottom = 15;
    }
    var { left: x1, top: y1, right: x2, bottom: y2 } = rect;
    document.writeln("<p>(x1, y1) = (" + x1 + ", " + y1 + ") / " +
        "(x2, y2) = (" + x2 + ", " + y2 + ")</p>");
    
    # Perl
    %rect = ( 'left' => 0, 'top' => 5, 'right' => 10, 'bottom' => 15 );
    my ($x1, $y1, $x2, $y2) = @rect{qw(left top right bottom)};
    print "<p>(x1, y1) = ($x1, $y1) / (x2, y2) = ($x2, $y2)</p>\n";
    
    関数の引数ってのは、Array.map関数がどういうものなのか知ってないとイマイチわかりにくそうなサンプルになっていたんでちと戸惑ったけんども、よーするにハッシュのリファレンスを渡すよーなものかな。
    // JavaScript
    function typeRectInfo([left, top, right, bottom]) {
        document.writeln(
            "<ul>" +
                "<li>left : " + left + "</li>" +
                "<li>top : " + top + "</li>" +
                "<li>right : " + right + "</li>" +
                "<li>bottom : " + bottom + "</li>" +
            "</ul>");
    }
    
    with (rect){
        left = 0; top = 5; right = 10; bottom = 15;
    }
    typeRectInfo(rect);
    
    # Perl
    sub typeRectInfo (\%) {     # プロトタイプ宣言で強制的に
                                # ハッシュのリファレンスを要求
        my ($left, $top, $right, $bottom) =
            @{shift}{qw(left top right bottom)};
        print
            '<ul>',
                "<li>left : $left<li>",
                "<li>top : $top<li>",
                "<li>right : $right<li>",
                "<li>bottom : $bottom<li>",
            '</ul>';
    }
    
    %rect = ( 'left' => 0, 'top' => 5, 'right' => 10, 'bottom' => 15 );
    typeRectInfo %rect;
    
    まぁ、こんなことで張り合ったって仕方ないわけだがw。for ... in 構文の key / value 渡しはちょっといいなぁとか思ってみたり。
    左辺リストに抜けがあるとエラーになるみたいだけど、Perl みたいに左辺リストに undef 突っ込んだ歯抜けリストにしていらない値は捨てる、みたいなことはできないのかにゃ?
    # Perl
    my ($x, undef, $z) = @vertex3d;
    
  • イテレータ ...C++ STL ほどの使い勝手はなさそう。。。next() するものが無くなると例外、ってのはちょっと使いにくそうだなぁ (undefined を返す、とかだったら使いやすいんだけど)。自分で実装できるのは面白いやね。
  • ジェネレータ ...関数をイテレータ的に駆動させる機構。こちらのサイトさんとかが興奮していらっさるようだけど、確かに面白いやね。
  • 配列内包 ...へぇ~、こんな書き方もできるんだぁ程度。使うかどうかは正直微妙。

いくつかの項目については実際に試してみますかな。。。今は別件抱えてて手出す暇あるか微妙だけど。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
おいらがやっている会社の名前をひらがな4文字で。

コメント:

トラックバック

このエントリのトラックバックURL: http://harapeko.asablo.jp/blog/2006/10/26/575796/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。