LoginSignup
4
0

More than 5 years have passed since last update.

[js] Array(配列)とObject(連想配列)を混在するアレ

Posted at

この記事は Nodejs:V8.9.1で検証した結果をもとに書いています

javascriptのArrayには連想配列的な添字を充てる事ができます。

var arr = new Array(1, 2, 3);
arr['text1'] = 'test';

この時点でのarrオブジェクトは以下の様になります。


t.log(arr.length);
// ℹ 3

t.log(Object.keys(arr));
// ℹ ['0','1','2','text1',]

t.log(arr instanceof Array);
// ℹ true

t.log(arr);
/* ℹ [
        1,
        2,
        3,
        ---
        text1: 'test',
      ]
*/

このオブジェクトでイテレートした時にどのような挙動になるのか調べてみます。

forEach

arr.forEach(function(s, i) {
  t.log(i, s);
});
/// result 
 0 1
 1 2
 2 3

arr.text1は無視されています。

for


for (j = 0, len = arr.length; j < len; j++) {
  s = arr[j];
  t.log(`for: ${s}`);
}
/// result
 for: 1
 for: 2
 for: 3

やはりarr.text1は無視されています。というよりもarr.length3なのでイテレートされるはずがありません。

for in


for (key in arr) {
  value = arr[key];
  t.log(`for in {${key}: ${value}}`);
}
///
 for in {0: 1}
 for in {1: 2}
 for in {2: 3}
 for in {text1: test}

arr.text1がイテレートされています。

そもそもこの挙動が公式に認められてるモノなのか、いつかシレっとなくなってしまうものなのかわかりません。
便利だから使いたいんだけどええんやろか。。。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0