没有副作用的哈希表

282 阅读1分钟

译者:边城

原文链接

没有副作用的哈希表

@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
}

注意: