译者:边城
没有副作用的哈希表
@bhaskarmelkani写于2017年9月1日
没有副作用的哈希表
如果想把JavaScript 对象当作哈希表(仅用于保存数据),你可能会像下面这样创建这个对象。
`const map = Object.create(null);`
如果使用对象字面量(const map = {})来创建这个哈希表,它会默认从 Object 继承属性。这等同于Object.create(Object.prototype)。
但如果使用Object.create(null),我们可以明确地指定其原型为null。因此,它才是真正的无属性,甚至没有构造器、toString、hasOwnProperty 等。因此,如果你的数据结构需要这些键名,尽可随意使用。
依据:
const dirtyMap = {};
const cleanMap = Object.create(null);
dirtyMap.constructor // function Object() { [native code] }
cleanMap.constructor // undefined
// Iterating maps
const key;
for(key in dirtyMap){
if (dirtyMap.hasOwnProperty(key)) { // Check to avoid iterating over inherited properties.
console.log(key + "" -> "" + dirtyMap[key]);
}
}
for(key in cleanMap){
console.log(key + "" -> "" + cleanMap[key]); // No need to add extra checks, as the object will always be clean
}