// 単純な変数の代入と入れ替え
var [a, b, c] = [1, 2, 3]  // a=1, b=2, c=3
[b, c, a] = [a, b, c];     // a=3, b=1, c=2
[b, [c, a]] = [a, [b, c]]; // a=2, b=3, a=1

// 右辺には配列を返す関数も利用できる
function f() {
  return [1, 2, ,4 ,5]; // 右辺左辺ともに一部要素を省略可
}
[a, , c, d, e] = f(); // a=1, c=undefined, d=4, e=5

// 正規表現のマッチ結果配列を分割代入する例
var url = "http://firefox3hacks.org/forum";
var urlregexp = /^(?w+)?:?/?/([^?/:]+)(:?d+)?(?/.*)$/;
[, protocol, host, port, path] = urlregexp.exec(url);
// for-in文で分割代入する場合はオブジェクトをIterator()で囲む
var obj = {fire: "fox", thunder: "bird"}
for (var [key, val] in Iterator(obj)) {
  alert(key + "といえば " + val); // => "fireといえばfox"
}

// 右辺左辺ともにオブジェクトも使用可能
var {0:a, 2:b, 6:c} = [1,2,3,4,5];  // a=1, b=3, c=undefined
var {a:x, b:y, c:z} = {c:30, b:20, a:10} // x=10, y=20, z=30
var [a,b,c] = {foo:x, 0:y, 1:z} // a=20, b=30, c=undefined
// varやletなしで左辺にオブジェクトを使用するときはカッコで囲む
({foo:a}) = {foo: 10}; // a=10
