Hatena::Groupos0x

FFFF RSSフィード

0xFFのメモです。

2008 June 21st Saturday

ObjectからObject?への分割代入

| 19:53 | ObjectからObject?への分割代入 - FFFF を含むブックマーク はてなブックマーク - ObjectからObject?への分割代入 - FFFF

(改めて書くのもあれだけど、分割代入が使えるのは2008年6月現在でFirefoxとOperaだけです)

mal_blue@tumblrより。

var {0:a, 3:b} = [10,20,30,40,50];
alert(a);// 10
alert(b);// 30

これは配列からObject?への代入ですが、ObjectからObject?への代入もできます。

var {a:a, b:b} = {a:10,b:20,c:30,d:40,e:50};
alert(a);// 10
alert(b);// 20

もうちょっと実用的に、こんな書き方ができます。

document.addEventListener('click',function(evt){
    var {pageX:x,pageY:y} = evt;
    console.log(x,y);
},false);

感覚的にはvar {x:pageX}と書きたくなってしまうので、ミスしやすそうなのが気になるところ。

そして、この場合左側はObjectっていってよいのかな?


ちなみに、Operaも分割代入をサポートしてるといわれているけど、Objectには入れられないし、var宣言をつけただけでも構文エラーだから使い物に。。

mal_blueさんにコメントで補足いただきました。ありがとうございます。

mal_bluemal_blue2008/06/22 14:40・http://wiki.ecmascript.org/doku.php?id=proposals:destructuring_assignment
が元になってますから、左辺は Object Patten, Array Pattern といえばいいんじゃないですかねぇ。

・js1.8(fx3) だと evt の例は

var {pageX, pageY} = evt;

と書けます。
https://bugzilla.mozilla.org/show_bug.cgi?id=404734
web 上で、1.8を使う気になるかなぁ…

mal_bluemal_blue2008/06/22 14:50書き忘れた。
元の話は Array を Object Pattern に分割代入できるのがアレだ、という話ですんで、当然といえば当然なんですが。
逆(Array Pattern に Object を分割代入) も一応できるみたいですね。

var [a,b] = {0:11,1:22}; alert(a); alert(b) // 11,22

使いどころが思いつきませんが…

os0xos0x2008/06/23 13:00補足ありがとうございます! 勉強になります。

matsukazmatsukaz2008/06/25 01:55こんな宣言の仕方が出来るんですね!
目からウロコです(@@
勉強になりました!