JSにおけるfor inとfor ofの違い
1015 ワード
最も直接的な違いは:
for inが遍歴しているのは配列の索引(キーの名前)です.
for ofが巡回しているのは配列要素の値です.
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 ofエルゴード配列
for inオブジェクトを巡回
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 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オブジェクトを巡回