Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PropertyEnumerable返回false,但仍可枚举_Javascript - Fatal编程技术网

Javascript PropertyEnumerable返回false,但仍可枚举

Javascript PropertyEnumerable返回false,但仍可枚举,javascript,Javascript,根据: propertyIsEnumerable()方法返回一个布尔值,指示指定的属性是否可枚举 但当我运行以下代码时,它会输出: 方法信息不可枚举 但可以在for循环中看到 这使我困惑 更新 如@ ROBG所回答的,因为 PrimeTyStababy只检查对象本身的属性,如果我只想在对象上迭代属性,该怎么办? < P>只检查对象本身的属性,不考虑原型链。因此: me.propertyIsEnumerable('info') 返回false,因为我没有info属性,它在Person.prot

根据:

propertyIsEnumerable()方法返回一个布尔值,指示指定的属性是否可枚举

但当我运行以下代码时,它会输出:

方法信息不可枚举
但可以在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')