for...in
for...in 用来遍历对象的可枚举属性。很多人第一次接触它时,会把它理解成'专门遍历数组下标'的语法,这种说法不算错,但只说了一半。它更准确的职责,是按属性名去遍历一个对象,而且会把原型链上可枚举的属性也一起带出来。
先看一个最常见的场景:
const arr = [1, 2, 3, 4, 5];
const obj = {
mark: 'mark-v',
jack: 'jack-v',
amy: 'amy-v',
};
for (const i in arr) {
// 输出 0 1 2 3 4
console.log(i);
}
for (const i in obj) {
// 输出 mark jack amy
console.log(i);
}
数组里输出的是下标,对象里输出的是键名。这个结果并不意外,但它也容易让人误以为 for...in 的能力就这么点。实际上,真正值得注意的,是它背后处理属性的规则。
继续往下看:
const arr = [1, 2, 3, 4, 5];
arr.value = 'array'; // 给数组对象额外加一个属性
const s1 = Symbol('symbol1');
const s2 = Symbol('symbol2');
const obj = {
mark: 'mark-v',
jack: ,
: ,
[s1]: ,
[s2]: ,
};
.(obj). = ;
( i arr) {
.(i);
}
( i obj) {
.(i);
}

