No.239


【Javascript】配列、オブジェクトの順序

あれ?オブジェクトって読み出し順番が一定じゃない?

 結論から言うと、

  • Javascriptのオブジェクト(連想配列)はオブジェクトに代入された順番を記憶していない。
  • Javascriptの配列は配列に代入された順番を記憶している。

 となる。
 普段使っている他の言語では連想配列の順番が保証されていることが多いので油断していた…


オブジェクト

 オブジェクトは中身の新旧を管理していない。一部のブラウザでは順番通りに出てくるらしいのだが、自分が試した感じでは配列のキーでソートされて出てくるケースが多い気がする。

var obj = {};
obj.xyz = 1;
obj.abc = 2;
obj.123 = 3;

(Object.key(obj).forEach(function(key) {
  console.log(obj[key]);
}

 だと、なんとなく

1
2
3

 と表示される気がするけど、実際は(手許のchromeでは)

3
2
1

 となった。

 キー指定が前提なので順番は関係ないということか。


配列

 配列はpushpopといった概念があることからもわかるとおり、中身の順番が管理されている。

let ary = [];
ary[] = 1;
ary[] = 2;
ary[] = 3;
(ary.forEach(function(val) {
  console.log(val);
}

 だと、

1
2
3

 となる。