destructuring assignment

そのさん。 Perlガリガリ書いてた頃は普通に

my ($foo, $bar) = (0, 1);

と書いていたのでそんなに凄いこととは思ってなかったんだけど、これは分割代入といってだな… ( https://developer.mozilla.org/ja/New_in_JavaScript_1.7#.e5.88.86.e5.89.b2.e4.bb.a3.e5.85.a5 ) 、的に説明されるとちょっといい感じに見えてくるから不思議。とりあえず以下のような書き方

// swap
[a, b] = [b, a];

// multiple return
function foo() {
    return [0, 1];
}
let [zero, one] = foo();

が嬉しかったり、 prototype を拡張してもそれを無視してくれる以下の書き方がうれしいということでいいかな。

function StyleSheet(){}
StyleSheet.prototype = {
    toString: function () {
        var temp = [];
        // toString をはじく判定をしなくていいのがうれしい
        for(let [property, value] in Iterator(this)) {
            temp.push(property.replace(/_/g, '-') + ':' + value);
        }
        return temp.join(';') + (temp.length > 0 ? ';' : '');
    },
};

// test code
var css = new StyleSheet;
css.font_size = '12px';
css._moz_transparency = 0.7;
css.content = '"ゆっくりしていってね !!"';
alert(css);
alert((css == 'font-size:12px;-moz-transparency:0.7;content:"ゆっくりしていってね !!";') ? 'ok' : 'ng');

ECMAScript 4 draft ( http://www.ecmascript.org/es4/spec/overview.pdf ) によると配列だけじゃなくてオブジェクトに対しても以下のようにかけるようにすると書いてあるんだけどこれはどうなんだろう。正直わかりにくい気がするけど慣れれば便利なんだろうか。

// x = 1024, y = 768
let {x, y} = {x: 1024, y: 768};
// a = 24, b = 24
let {x: a, y: b} = {x: 24, y: 24};