[英]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__
的正常字符串值是允許的:
- 如果 propKey 是字符串值
__proto__
並且 IsComputedPropertyKey(PropertyName) 為 false ,則
一個。 讓 isProtoSetter 為真。
- 別的,
一個。 讓 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.