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