修改数组原型会导致foreach的行为不同

Modifying array prototype causes foreach to behave differently

本文关键字:foreach 数组 原型 修改      更新时间:2023-09-26

我注意到,每当我修改数组原型时,它都会改变foreach的行为。我创建了下面的例子,向你们展示我在做什么:

Array.prototype.x = 10;
for(var i in [1,2,3]){
    alert(i);
}

这个例子显示了四个警报:"1","2","3"answers"x";

为什么这个代码给我4个警报?

如何修改数组原型而不干扰foreach ?

你需要定义你的属性为" non-enumerable ":

Object.defineProperty(Array.prototype, 'x', {
    enumerable: false,
    value: 10
});

下面是一个JSFiddle,它显示了正在运行的代码