为什么length是`Array`的属性而不是`Array.prototype`链

时间:2017-12-29 10:15:34

标签: javascript arrays

所以我在V8游戏机上玩得很多,我做了

Object.getOwnPropertyNames([])

我希望得到[],但["length"]

这意味着length不是原型链的一部分,而是所有Array个对象的成员属性。

这是一个错误,还是有任何设计或具体原因length不是原型链的一部分?

3 个答案:

答案 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'));