概述
Map 对象是简单的 键/值 映射. 键可以是原始值或者引用值. 判断两个键的值是否相等的算法与 === 操作符不同. 该算法很特殊, 对于Map对象来说, +0 (按照以往的经验与 -0 是严格相等的) 和 -0 是两个不同的键. NaN 也可以作为一个Map对象的键.(译者注:Map可以看作是键为任意类型值的对象,因为普通的javascript对象的键只能是字符串)
API
| 方法 | 描述 |
|---|---|
myMap.get(key) | 返回键 key关联的值, 如果没有该键则返回 undefined . |
myMap.set(key, value) | 设置键 key 在 myMap中的值. 返回 undefined. |
myMap.has(key) | 返回一个布尔值来表明键 key 是否在 myMap 中. |
myMap.delete(key) | 删除键 key 及对应的值. 在这之后, myMap.has(key)将返回 false. |
ECMAScript 6将有望于在未来的版本中允许脚本遍历一个Map对象中的值. 但由于目前标准还没有规定,所以 SpiderMonkey 也没有实现这个功能.
例子
var myMap = new Map();
var keyObj = {},
keyFunc = function () {},
keyString = "a string";
// setting the values
myMap.set(keyString, "value associated with 'a string'");
myMap.set(keyObj, "value associated with keyObj");
myMap.set(keyFunc, "value associated with keyFunc");
// getting the values
myMap.get(keyString); // "value associated with 'a string'"
myMap.get(keyObj); // "value associated with keyObj"
myMap.get(keyFunc); // "value associated with keyFunc"
myMap.get("a string"); // "value associated with 'a string'"
// because keyString === 'a string'
myMap.get({}); // undefined, because keyObj !== {}
myMap.get(function() {}) // undefined, because keyFunc !== function () {}
NaN 也可以作为Map对象的键. 虽然 NaN 和任何值甚至和自己都不相等(NaN !== NaN 返回true), 但下面的例子表明, 两个 NaN 作为Map的键来说是没有区别的:
var myMap = new Map();
myMap.set(NaN, "not a number");
myMap.get(NaN); // "not a number"
var otherNaN = Number("foo");
myMap.get(otherNaN); // "not a number"
JavaScript 有两个0值, +0 和 -0. 虽然+0===-0,但是当这两个0作为Map的键时,被认为是两个不同的值.
var myMap = new Map(); myMap.set(0, "positive zero"); myMap.set(-0, "negative zero"); 0 === -0; // true myMap.get(-0); // "negative zero" myMap.get(0); // "positive zero"
浏览器兼容性
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | -- | 12.0 (12) | -- | -- | -- |
| Feature | Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|
| Basic support | -- | 12.0 (12) | -- | -- | -- |
Mozilla Developer Network