根据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));
}