2016-05-30 49 views
-1

我得到,使用for ... in循环将返回一个对象的所有属性,包括它的原型链,并使用.keys()会给我一个非继承数组(基本上为... in与hasOwnProperty结合),但为什么不在for循环中包含从Object引入的东西?也就是说为什么不包含..在Object中包含toString函数?谢谢!在JavaScript中,为什么不返回Object.prototype的内容?

+1

的了... in语句遍历的**枚举的属性**的对象,以任意顺序 - HTTPS://developer.mozilla。 org/en-US/docs/Web/JavaScript/Reference/Statements/for ... in – elclanrs

+1

'for..in'循环只遍历[定义为'enumerable']的属性(https://developer.mozilla .ORG/EN-US /文档/网络/的JavaScript /参考/ Global_Objects /对象/ defineProperty)。您可以使用['Object.getOwnPropertyDescriptor(Object.prototype,'toString').enumerable']检查该设置(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor)。 –

回答

2

对象的属性由其键,值定义,也可以是可配置的,可枚举的,可写的。一个非枚举属性不会在循环中显示。

当这样

var myObject = {}; 
myObject["a"] = 3; 

创建一个对象的属性,是默认配置,枚举和可写的。它将显示在循环中。可以使用Object.defineProperty创建不可枚举的属性。您可以检查一个属性可以枚举与.propertyIsEnumerable

myObject.propertyIsEnumerable("a"); // --> true 
Object.propertyIsEnumerable("toString"); // --> false 
+0

这使得完美的感觉。我没有意识到Object的属性被定义为不可枚举。谢谢! – CADBOT

相关问题