地图中的默认键是什么意思?

What does it mean to say, default keys in map?

Here,它说,一个Object有一个原型,所以映射中有默认键。但是,这可以使用 map = Object.create(null).

绕过

我无法理解map = Object.create(null)的意思。

1) 将map.__proto__设置为null是什么意思?

2) 上面这段话,map的default keys是什么意思?

3) 这些默认键与 Object 有原型有什么关系?

map = Object.create(null). 

意味着创建一个空对象,它甚至不会从 Object.prototype.

获取属性

如果你试过

Object.getPrototypeOf(map); 它将 return 为空。

In the above paragraph, what does it mean to say, default keys of map?

您可以将对象用作 string-to-value 地图。例如:

var map = {};
map["foo"] = "pizza";
map["year"] = 2001;

您可能希望映射最初是空的。也就是说,对于任何 key 值,您期望表达式 map[key] 到 return undefined,因为您尚未设置任何值。但是,对于普通对象,map["toString"] 有一个值!这与我们对上一句的期望相矛盾,我们期望 any map[key] 值为 undefined。这就是文档中 "default keys" 的意思——一些键已经填充了值,即使你没有设置它们。

How these default keys are related to Object having a prototype?

这是因为对象从 Object.prototype 继承了一些属性。 JavaScript中的所有对象(或几乎所有对象)都有一个原型。如果您向对象请求 属性,而对象没有 属性,那么它将检查其原型是否具有该值。在 toString 的情况下,我们用 map = {} 创建的新对象没有自己的 toString 属性,但它的原型 Object.prototype 有有一个名为 toString 的 属性。因此,当您向对象实例请求名为 toString 的 属性 时,您会从原型中返回 toString 属性。

What does it mean to set map.__proto__ to null?

这里的解决方案是创建一个根本没有原型的对象。即原型为null的对象。我们可以用 Object.create(null).

来做到这一点

在那种情况下,当我们执行 map = Object.create(null) 然后请求 map["toString"] 时,我们确实得到了 undefined,因为 null-prototype map没有原型可以从 toString 属性