簡體   English   中英

為什么 __proto__ 周圍的方括號使它可以在 object 中枚舉

[英]Why do square brackets around __proto__ makes it enumerable in an object

在 object 中在__proto__周圍使用方括號時,__ __proto__是可枚舉的。 當沒有提供方括號時, __proto__是不可枚舉的。

例子:

 obj = {"__proto__": "Hello"} for (var k in obj) { console.log(k) }; // No Output

使用方括號

 obj = {["__proto__"]: "Hello"} for (var k in obj) { console.log(k) }; // Output: // __proto__

我知道使用方括號計算屬性名稱,但我不明白為什么一個可以枚舉而另一個不能。

在規范中有所描述。 __proto__的計算屬性名稱明確排除isProtoSetter檢查之外,而__proto__的正常字符串值是允許的:

  1. 如果 propKey 是字符串值__proto__並且 IsComputedPropertyKey(PropertyName) 為 false ,則

一個。 讓 isProtoSetter 為真。

  1. 別的,

一個。 讓 isProtoSetter 為假。

isProtoSetter標志為真時,表明創建的 object 應該具有與該鍵配對的值的內部原型。 object 的標准內部原型的__proto__不可枚舉 - 它存在於Object.prototype上:

 console.log(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__'));

當為 false 時,它相當於擁有一個名為__proto__普通屬性,並且 object 初始化程序中的普通屬性變為可枚舉的。

暫無
暫無

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

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