所以我在V8游戏机上玩得很多,我做了
Object.getOwnPropertyNames([])
我希望得到[]
,但["length"]
这意味着length
不是原型链的一部分,而是所有Array
个对象的成员属性。
这是一个错误,还是有任何设计或具体原因length
不是原型链的一部分?
答案 0 :(得分:2)
原型属性在对象之间共享。因此,如果将长度放在原型上,则所有数组对象将具有相同的长度,这是错误的。 Length表示当前数组中元素的数量,应该保留self的属性。
答案 1 :(得分:2)
这不是一个错误。根据定义,Object.getOwnPropertyNames
将返回对象的所有可枚举和不可枚举的自有属性。说到数组,length是一个自己的属性,但它的可枚举属性是false。这就是它被包含在结果中的原因。
您可以使用以下代码段进行测试,
console.log(Object.getOwnPropertyDescriptors([]));
上面的代码将返回所有属性的描述符。检查它,你将了解它的可枚举财产。
答案 2 :(得分:0)
因为它不可感知(Object#propertyIsEnumerable
)。
进一步阅读:Enumerability and ownership of properties
console.log([].propertyIsEnumerable('length'));