Here ,它说,一个 Object
有一个原型(prototype),所以映射中有默认键。但是,这可以使用 map = Object.create(null)
来绕过。
我无法理解 map = Object.create(null)
的含义。
1) 将map.__proto__
设置为null
是什么意思?
2) 上面这段话,map的default keys是什么意思?
3) 这些默认键如何与具有原型(prototype)的 Object
相关?
最佳答案
In the above paragraph, what does it mean to say, default keys of map?
您可以将对象用作字符串到值的映射。例如:
var map = {};
map["foo"] = "pizza";
map["year"] = 2001;
您可能希望映射最初是空的。也就是说,对于任何 key
值,您期望表达式 map[key]
返回 undefined
,因为您还没有设置任何值.但是,对于普通对象,map["toString"]
有一个值!这与我们对上一句的期望相矛盾,我们期望 any map[key]
值为 undefined
。这就是文档中“默认键”的意思——一些键已经填充了值,即使你没有设置它们。
How these default keys are related to Object having a prototype?
这是因为对象从 Object.prototype
继承了一些属性。 JavaScript 中的所有对象(或者几乎所有对象)都有一个原型(prototype)。如果你向一个对象询问一个属性,而这个对象没有那个属性,那么它会检查它的原型(prototype)是否有这个值。在 toString
的情况下,我们使用 map = {}
创建的新对象本身没有 toString
属性,但它的原型(prototype),Object.prototype
,确实有一个名为 toString
的属性。因此,当您向对象实例请求名为 toString
的属性时,您会从原型(prototype)中取回 toString
属性。
What does it mean to set
map.__proto__
tonull
?
这里的解决方案是创建一个根本没有原型(prototype)的对象。即,原型(prototype)为 null
的对象。我们可以使用 Object.create(null)
来做到这一点。
在那种情况下,当我们执行 map = Object.create(null)
然后请求 map["toString"]
时,我们确实得到了 undefined
,因为 null
-prototype map
没有从中获取继承的 toString
属性的原型(prototype)。
关于javascript - map 中的默认键是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34535398/