【Javascript】关于Hashmap
Javascript在过去的版本中并没有原生支持hashmap,但可以用对象来模拟。只是键值只能是字符串,传入其他参数键值时会自动转换字符串。
基本用法
var map={}; map['key1'] = 1; map['key2'] = 2; for (var key in map) { alert(map[key]); // 获取值 } alert('key1' in map); // 检查存在性 delete(map['key1']); // 删除一个元素 alert(map['key1']);
扩展用法
如果希望键值可以任意,可以自己来构造一个生成键值的函数,自行加一层包装。
对象map的注意点
对象的方法也会被识别为对象元素,对in操作有影响,如对象默认继承的toString方法
var map={};</span></pre> <pre class="prettyprint lang-javascript"><span class="str">alert('toString'</span> <span class="kwd">in</span><span class="pln"> map); // true
这个问题可以用hasOwnProperty()方法解决。但因为考虑到可能正好对象存在hasOwnProperty属性,于是需要用{}.hasOwnProperty.call(map, '属性名');
这里更好的方式是使用Object.create(null);于是就不会继承自Object了。
<span class="kwd">var</span><span class="pln"> map </span><span class="pun">=</span> <span class="typ">Object</span><span class="pun">.</span><span class="pln">create</span><span class="pun">(</span><span class="kwd">null</span><span class="pun">);</span> <span class="kwd">for</span><span class="pun">(</span><span class="kwd">var</span><span class="pln"> key </span><span class="kwd">in</span><span class="pln"> map</span><span class="pun">){</span> <span class="com">// do something</span> <span class="pun">}
Javascript的原生Map
在Mozilla上有Map的定义,这个是在ECMAScript 2015 (6th Edition, ECMA-262)中初始定义,在ECMAScript 2017 Draft (ECMA-262)中完善的。浏览器也在陆续支持中,只能是是未来趋势,但要全面使用还有一段时间。
参考文章
标签: Javascript
还没有人抢沙发呢~