JavaScript 中哈希映射

Posted by cl9000 on March 06, 2020

人生不是一种享乐,而是一桩十分沉重的工作。 ——<列夫·托尔斯泰>

当您想要使用javascript对象作为散列映射(纯粹用于存储数据)时,您可能想要如下所示创建它。

1
const map = Object.create(null);

当使用object literal(const map ={})创建映射时,该映射默认会继承object的属性。它相当于Object.create(Object.prototype)

但是通过Object.create(null),我们显式地指定null作为它的原型。它绝对没有属性,甚至没有构造函数,toString, hasOwnProperty等,你可以在数据结构中自由使用这些键。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
}

注:
Object.create()是在ES5中引入的: Compatibility
ES6引入了一些新的结构: Map, WeakMap, SetWeak Set

参考

关注【公众号】,了解更多。



支付宝打赏 微信打赏

赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!