for-in文で取り出すときの並び順です
for-inでの取得順は決まっていないというのを見かけて、いつも使うとき入れた順だと思って使ってたし実際入れた順になってる気がする と思って調べてみました
使ったのはこのコード
ランダムな文字列をキーとしてオブジェクトに1000個プロパティを作成します
作成したときのキーを配列にも保存しておき、for-in文で取り出す時に配列と同じ並びかを確認します
これを1000回繰り返して、入れた順と同じだった回数を最後に表示します
IE9
IE11
Firefox28
Firefox29
Chrome32
Chrome33
で1000回とも入れた順と取得順が一緒になってました
(IE9がいるのはVistaに入れられるIEの最新版だからです)
取得順は保証されないというのが元々がどこ情報なのかわかりませんが、今の主なブラウザでは入れた順に取得できると言っていいと思います
使ったのはこのコード
ランダムな文字列をキーとしてオブジェクトに1000個プロパティを作成します
作成したときのキーを配列にも保存しておき、for-in文で取り出す時に配列と同じ並びかを確認します
これを1000回繰り返して、入れた順と同じだった回数を最後に表示します
実行してみるとvar rdmkey = function(){return new Array(10).join(" ").split(" ").map(function(e){return String.fromCharCode(Math.random()*100%26+97)}).join("");}var sameorder = 0;for(var i=0;i<1000;i++){var obj = {};var ary = [];for(var j=0;j<1000;j++){var t = rdmkey();obj[t] = Math.random();ary.push(t);}var count = 0, match = 0;for(var key in obj){if(key==ary[count++]) match++;}if(count==match) sameorder++;}console.log(sameorder+" of 1000 is sameorder");
IE9
IE11
Firefox28
Firefox29
Chrome32
Chrome33
で1000回とも入れた順と取得順が一緒になってました
(IE9がいるのはVistaに入れられるIEの最新版だからです)
取得順は保証されないというのが元々がどこ情報なのかわかりませんが、今の主なブラウザでは入れた順に取得できると言っていいと思います
コメントする