我正在阅读Eloquent JavaScript(https://eloquentjavascript.net/),在第6章中,Marjin Haverbeke建议了一种创建我们自己的地图版本的方法是使用Object.create(null)。本书中的示例是
console.log(Object.create(null)中的“ toString”); //为空
我尝试使用此方法创建地图。这是我所做的:
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数据类型,但是我试图弄清楚这一点是出于概念上的理解。
答案 0 :(得分:3)
您重新分配 ages
到对象文字,该文字确实正确继承了toString
。重新分配Object.create(null)
变量后,通过ages
创建的对象不再具有任何引用。如果您没有重新分配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);
答案 1 :(得分:1)
使用以下行,您正在重新创建对象:
ages = {Boris : 29, Liang : 22, > Julia : 62};
我想做的是以下几点:
ages = Object.create(null);
ages.Boris = 29;
ages.Liang = 22;
ages.Julia = 62;
console.log("Do we know toString's age?", 'toString' in ages); // => false
关于, 文森特