Javascript PropertyEnumerable返回false,但仍可枚举
根据: propertyIsEnumerable()方法返回一个布尔值,指示指定的属性是否可枚举 但当我运行以下代码时,它会输出: 方法信息不可枚举Javascript PropertyEnumerable返回false,但仍可枚举,javascript,Javascript,根据: propertyIsEnumerable()方法返回一个布尔值,指示指定的属性是否可枚举 但当我运行以下代码时,它会输出: 方法信息不可枚举 但可以在for循环中看到 这使我困惑 更新 如@ ROBG所回答的,因为 PrimeTyStababy只检查对象本身的属性,如果我只想在对象上迭代属性,该怎么办? < P>只检查对象本身的属性,不考虑原型链。因此: me.propertyIsEnumerable('info') 返回false,因为我没有info属性,它在Person.prot
但可以在for循环中看到 这使我困惑
更新
如@ ROBG所回答的,因为<代码> PrimeTyStababy只检查对象本身的属性,如果我只想在对象上迭代属性,该怎么办?
< P>只检查对象本身的属性,不考虑原型链。因此:me.propertyIsEnumerable('info')
返回false,因为我没有info属性,它在Person.prototype上。它出现在for循环中,因为它将迭代me的所有属性,包括从其构造函数原型继承的属性
由于这种行为,propertyIsEnumerable在Safari的早期版本中被用作hasOwnProperty的替代品,hasOwnProperty要么有缺陷,要么不存在(我不记得是哪个)。谢谢@RobG。但是,如果只想在对象上迭代属性,该怎么办呢?您可以使用带有hasOwnProperty检查的for循环并忽略那些失败的,或者您可以迭代
Ojbect.keys(me)
(请参阅)的成员,这是以与for循环相同的顺序返回自身可枚举属性数组所必需的(但在不同的浏览器中可能会有所不同,所以我不确定规范为什么要求这样做)。
me.propertyIsEnumerable('info')