gpt4 book ai didi

javascript - 为什么 __proto__ 周围的方括号使其在对象中可枚举

转载 作者:行者123 更新时间:2023-12-03 22:59:58 25 4
gpt4 key购买 nike

__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__

我了解使用方括号 computed property names ,但我不明白为什么一个可以枚举而另一个不能。

最佳答案

这是描述in the specification . __proto__ 的计算属性名称被明确排除在 isProtoSetter 之外检查,而 __proto__ 的正常字符串值被允许:

  1. If propKey is the String value __proto__ and if IsComputedPropertyKey(PropertyName) is false, then

a. Let isProtoSetter be true.


  1. Else,

a. Let isProtoSetter be false.

isProtoSetter flag,当为真时,表示创建的对象应该有一个与该键配对的值的内部原型(prototype)。 __proto__因为对象的标准内部原型(prototype)是不可枚举的 - 它存在于 Object.prototype :

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

如果为 false,则相当于拥有一个名为 __proto__ 的普通属性。 , 并且对象初始值设定项中的普通属性变得可枚举。

关于javascript - 为什么 __proto__ 周围的方括号使其在对象中可枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66556087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com