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等方法会更好。