javascript - map 中的默认键是什么意思?

标签 javascript javascript-objects

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__ to null?

这里的解决方案是创建一个根本没有原型(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/

相关文章:

Javascript:用于揭示模块模式的通用 getter/setter

javascript - 同步 promise 行动

Javascript 对象和键

javascript - JavaScript 值中的小写字母和单词合并在一起

javascript - 'Then' 在 CasperJS 中的真正含义是什么

javascript - 当内容低于 setInterval 时模态不显示

javascript - 在tinymce编辑器中模糊时如何获取父iFrame ID?

javascript - BitGO - 从对象数组中获取帐户和值(value)

无法从 jquery 对象调用的 Javascript 方法?

javascript - 获取 JavaScript 对象的所有键