for in 和 for of
定义
for (variable of iterable) {
// statements
}
其中 iterable
可以是 Array
,Map
,Set
,String
,TypedArray
,arguments
包括显式实现可迭代协议的对象等等
for...of 和 for...in 的区别
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 in iterable) {
if (iterable.hasOwnProperty(i)) {
console.log(i); // logs 0, 1, 2, "foo"
}
}
for (let i of iterable) {
console.log(i); // logs 3, 5, 7
}
结论:
for key in obj
会遍历可枚举属性,包括继承下来的属性;for item of iterable
会遍历iterable
可迭代的值,这些是数组元素,而不是任何对象的属性。
参考 for...of