JavaScript for ..In On 数组循环访问不可枚举的属性



根据MDN和其他各种来源,for...in只迭代可枚举的属性。通过可枚举,我假设那些返回false propertyIsEnumerable()。不过,此页面上的以下代码

var TstArr = [0];
for (var A in TstArr) {
	console.log("In",TstArr.propertyIsEnumerable(A),TstArr[A]);
};

记录以下内容:

In false function each()
In false function eachSlice()
In false function all()
In false function any()

我知道不建议for...in数组,我已经怀疑数组是由原型扩展的,这不是我的问题。我的问题是为什么它列举了它不应该列举的东西。FF和Chrome也是如此。

propertyIsEnumerable确实测试对象自己的属性是否可枚举。如果对象没有具有该名称的自己的属性,则返回 false

鉴于这些枚举属性是从TstArray原型继承的,则需要在该对象上调用该方法:

for (var p in TstArr) {
    console.log(p, Object.getPrototypeOf(TstArr).propertyIsEnumerable(p));
}

最新更新