我正在阅读 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/