数组中…的JavaScript遍历不可数属性
根据和各种其他来源,数组中…的JavaScript遍历不可数属性,javascript,Javascript,根据和各种其他来源,for…in仅迭代可枚举属性。通过enumerable,我假设那些返回false的属性是enumerable()。尽管如此,第页上的以下代码 var TstArr=[0]; 用于(TstArr中的var A){ console.log(“In”,TstArr.propertyEnumerable(A),TstArr[A]); };会测试对象的自己的属性是否可枚举。如果对象没有具有该名称的自己的属性,则返回false 鉴于这些枚举属性是从TstArrays原型继承的,您需要调
for…in
仅迭代可枚举属性。通过enumerable,我假设那些返回false
的属性是enumerable()。尽管如此,第页上的以下代码
var TstArr=[0];
用于(TstArr中的var A){
console.log(“In”,TstArr.propertyEnumerable(A),TstArr[A]);
};代码>会测试对象的自己的属性是否可枚举。如果对象没有具有该名称的自己的属性,则返回false
鉴于这些枚举属性是从TstArray
s原型继承的,您需要调用该对象上的方法:
for (var p in TstArr) {
console.log(p, Object.getPrototypeOf(TstArr).propertyIsEnumerable(p));
}
我甚至不知道这个方法的存在:-/出于好奇,MDN有关于和的全部细节。@Michael Geary阅读了这两页,第一页是在提问之前,第二页是在早些时候。看起来他们没有很好地概述支票的所有权要求。或者这可能是我的阅读技能。@FelixKling:这是一种可怕的Object
方法,通常需要使用Object.prototype…..调用,以捕获所有边缘情况。@Zero下划线EOU:最开始:“此方法可以确定对象中的指定属性是否可以由for…in循环枚举,但通过原型链继承的属性除外。如果对象没有指定的属性,此方法将返回false。“如果您正在使用Prototype.js库,您应该在问题中标记它。它扩展了Array.prototype,后者的内置方法不可枚举。对我来说,结果是为真0
@RobG Prototype用于该页面,但我没有在我有疑问的部分使用它。它的原型方法是我的猜测。当然,但它解释了为什么这些方法会出现。运行您的代码片段不会产生您所说的结果,它会返回我所期望的结果。注意到Prototype.js包含在页面中,这会有所帮助。