簡體   English   中英

為什么length是Array屬性而不是Array.prototype鏈

[英]Why is length a property of `Array` not `Array.prototype` chain

所以我在V8控制台中玩的很多,

Object.getOwnPropertyNames([])

我期望得到[]作為結果,但是["length"]

因此,這意味着length不是所有原型對象的一部分,而是所有Array對象的成員屬性。

這是一個錯誤,或者是有任何設計或特殊原因length是不是一個原型鏈的一部分嗎?

原型屬性在對象之間共享。 因此,如果將長度放在原型上,則所有數組對象將具有相同的長度,這是錯誤的。 長度表示當前數組中的元素數,應保留為self的屬性。

那不是錯誤。 根據定義, Object.getOwnPropertyNames將返回對象的所有可枚舉和不可枚舉的自身屬性。 當涉及數組時,length是一個自己的屬性,但其可枚舉的屬性為false。 這就是為什么它被包含在結果中的原因。

您可以使用以下代碼段對其進行測試,

console.log(Object.getOwnPropertyDescriptors([]));

上面的代碼將返回所有自己屬性的描述符。 檢查它,您將了解它的可枚舉屬性。

因為它不可枚舉( Object#propertyIsEnumerable )。

進一步閱讀: 可枚舉性和財產所有權

 console.log([].propertyIsEnumerable('length')); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM