Javascript配列の「文字列」索引とfor...inとfor...ofの違い

1152 ワード

TL;DR:jsの配列には「文字列」インデックスがありません.array['b'] = someValueのように、arrayオブジェクトに属性を追加しただけです.
いくつかの例がありますが、MDNの文書が見つかったので、少し外します.
以下はMDNDiference between for...of and for...inから抜粋します.
The for...in loop will iterate over all enumerable properties of an object.
for inサイクルは、オブジェクトの上のすべてのenumerable属性を巡回します.
The for...of syntax is specific to collection、rather than all object.It will iterate in this manner over the elemens of any collection a [Symbol.iterator] property.
for of文法は対象です.
すべてのオブジェクトではなく、集合します.定義を巡回します.[Symbol.iterator]属性のセットのすべての要素.
The follwing example shows the difference between a for...of loop and a for...in loop.
MDNの例は以下の通りである.
Object.prototype.objCustom = function() {}; 
Array.prototype.arrCustom = function() {};

let iterable = [3, 5, 7];
iterable.foo = 'hello';

for (let i in iterable) {
  console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom"
}

for (let i of iterable) {
  console.log(i); // logs 3, 5, 7
}