[英]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.