for of vs for in
1345 ワード
for...ofサイクル
一つのデータ構造はSymbol.iterator属性を展開すれば、iteratorインターフェースを持っていると見なされ、for...ofサイクルでそのメンバーを遍歴することができます.つまり、for…ofサイクル内部で呼び出したのは、データ構造のSymbol.iterator方法です.
for...ofサイクルが使用できる範囲は、配列、セット、およびMap構造、いくつかの類似配列のオブジェクト(例えば、argmentsオブジェクト、DOM NodeListオブジェクト)、Generatorオブジェクト、および文字列を含む.
普通のオブジェクトに対しては、for...of構造は直接使用できません.エラーが発生します.Iteratorインターフェースを配置してから使えば、keyと組み合わせても使えます.
1.循環オブジェクト属性の場合は、for...inを使用し、配列を巡回するときはfor...ofを使用することを推奨します.
2.for…in循環するのはkey、for…of循環するのはvalueです.
3.for…ofはES 6が新しく導入した特性です.ES 5導入のfor…inの不足を修復しました.
4.for…ofは普通のオブジェクトを循環できないので、Object.keys()と組み合わせることで使用する必要があります.
一つのデータ構造はSymbol.iterator属性を展開すれば、iteratorインターフェースを持っていると見なされ、for...ofサイクルでそのメンバーを遍歴することができます.つまり、for…ofサイクル内部で呼び出したのは、データ構造のSymbol.iterator方法です.
for...ofサイクルが使用できる範囲は、配列、セット、およびMap構造、いくつかの類似配列のオブジェクト(例えば、argmentsオブジェクト、DOM NodeListオブジェクト)、Generatorオブジェクト、および文字列を含む.
let arr = [1,2,3,"1","2","3",{a:'a'},{b:'b'}]
for (let key in arr){
console.log(key)
}
for (let value of arr){
console.log(value)
}
0
1
2
3
4
5
6
7
1
2
3
1
2
3
{a: "a"}
{b: "b"}
注意普通のオブジェクトに対しては、for...of構造は直接使用できません.エラーが発生します.Iteratorインターフェースを配置してから使えば、keyと組み合わせても使えます.
var student={
name:'xiaohui',
age:22,
locate:{
country:'china',
city:'hangzho',
}
}
console.log(Object.keys(student))
for(var key of Object.keys(student)){
// Object.keys() key
console.log(key+": "+student[key]);
}
["name", "age", "locate"]
"name: xiaohui"
"age: 22"
"locate: [object Object]"
まとめ:1.循環オブジェクト属性の場合は、for...inを使用し、配列を巡回するときはfor...ofを使用することを推奨します.
2.for…in循環するのはkey、for…of循環するのはvalueです.
3.for…ofはES 6が新しく導入した特性です.ES 5導入のfor…inの不足を修復しました.
4.for…ofは普通のオブジェクトを循環できないので、Object.keys()と組み合わせることで使用する必要があります.