for...in
循环会遍历数组的所有可枚举属性,包括数组的索引和所有原型链上的属性。下面是一个例子:
Array.prototype.myProperty = 'Hello'; // 添加一个属性到数组的原型链上let arr = [1, 2, 3];
arr.myOwnProperty = 'World'; // 添加一个自有属性for (let property in arr) {console.log(property + ': ' + arr[property]);
}
在这个例子中,我们首先添加一个属性myProperty
到Array.prototype
上。然后,我们创建一个数组arr
,并添加一个自有属性myOwnProperty
。当我们使用for...in
循环遍历arr
时,它会打印出数组的所有可枚举属性,包括数组的索引("0"
, "1"
, "2"
),自有属性("myOwnProperty"
),以及原型链上的属性("myProperty"
)。所以,输出将是:
0: 1
1: 2
2: 3
myOwnProperty: World
myProperty: Hello
这就是为什么使用for...in
循环遍历数组时需要小心。如果你只想遍历数组的元素,而不是所有可枚举的属性,那么使用for
循环、while
循环或者数组的forEach
、map
、filter
等方法会更好。