JSにおけるfor inとfor ofの違い

1015 ワード

最も直接的な違いは:
for inが遍歴しているのは配列の索引(キーの名前)です.
for ofが巡回しているのは配列要素の値です.
Array.prototype.method=function(){}
var myArray=[1,2,4];
myArray.name="  ";

for (var index in myArray)
    console.log(myArray[index]);    //0,1,2,method,name

for (var value of myArray) 
    console.log(value);    //1,2,4
これ以外に詳細があります.
for inのいくつかの欠陥:
  • インデックスは文字列型の数字ですので、直接幾何学的演算ができません.
  • エルゴード順序は、実際の内部順序ではないかもしれない
  • for inは、プロトタイプを含む、配列のすべてのエニュメレート・属性を巡回します.例えばプロトタイプ方法methodとname属性
  • したがって、オブジェクトをfor inで遍歴するのが一般的で、配列を巡回するためには使われません.
     これはつまりfor ofの存在の意味です.for of methodとnameを遍歴しないで、配列を遍歴するのに適しています.
     ではfor ofに欠点がありますか?もちろんあります
    for ofは通常のオブジェクトをサポートしていません.オブジェクトの属性を遍歴したいなら、for inでループしてもいいです.またはビルドされたObject.keys()方法:
    Object.keys(myObject)は、オブジェクトの例示的な属性からなる配列を取得し、プロトタイプ方法と属性は含まれない.
    for (var key of Object.keys(Object))
        console.log(key + ": " + Object[key]);
    
    しかし、これはちょっと多すぎると思います.
    まとめて言うと:
    for ofエルゴード配列
    for inオブジェクトを巡回