javascript - 使用 Object.create(null) 创建的 map 具有 toString 属性

标签 javascript object prototype

我正在阅读 Eloquent JavaScript ( https://eloquentjavascript.net/),在第 6 章中,Marjin Haverbeke 建议创建我们自己版本的 map 的一种方法是使用 Object.create(null)。书中给出的例子是

console.log("toString" in Object.create(null)); //null

我尝试使用这种方法创建 map 。这是我所做的:

let ages = Object.create(null); 
ages = {Boris : 29, Liang : 22, > Julia : 62};
console.log("Do we know toString's age?", 'toString' in ages);
//returns true

我希望最后一个 console.log 返回 false,但它返回 true。为什么是这样?我如何使用这个想法来创建一个不继承 toString 属性的 map ? 注意:我模糊地知道 map 数据类型,但我正试图弄清楚这一点以进行概念理解。

最佳答案

重新分配 ages 给一个对象字面量,它确实继承了 toString。在 ages 变量重新赋值后,通过 Object.create(null) 创建的对象不再有任何引用。如果您没有重新分配 ages 并只是简单地分配给它属性,它就不会像您期望的那样具有 toString 属性:

const ages = Object.create(null); 
Object.assign(ages, {Boris : 29, Liang : 22, Julia : 62});
console.log("Do we know toString's age?", 'toString' in ages);

// similarly:

const ages2 = Object.create(null);
ages2.Boris = 29;
ages2.Liang = 22;
ages2.Julia = 62;
console.log("Do we know toString's age?", 'toString' in ages);

关于javascript - 使用 Object.create(null) 创建的 map 具有 toString 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51276110/

相关文章:

javascript - 使用自定义标志图标实现 Google 翻译

javascript - 使用 JavaScript 动态生成文本框

javascript - NodeJS 从基于自定义模块的匿名函数获取对象

javascript - 向 Array.prototype 添加方法,没有副作用

JavaScript/环回 : add property which value is the result of a function

javascript - HTML5 Canvas 层到 HTML/CSS 代码

Javascript Canvas 如何从旋转物体进行 360* 拍摄

java - ArrayList 作为对象属性不保存值

javascript - 映射对象数组

javascript - 在同一个声明中创建javascript函数和原型(prototype)定义?