Skip to content

Map

Map(字典/映射)是 Object 数据类型的增强版本。

不同点\数据结构ObjectMap
键的类型String or SymbolAny
键的顺序不固定。和添加顺序无关,与引擎实现有关。固定。和添加顺序有关
迭代器需要自己部署默认已经部署
迭代范围整个原型链上的所有可枚举属性自身可枚举属性
属性可控性属性表的控制,访问器属性的控制
易用性

实例的创建

js
new Map();
const map = new Map(iterator); // 见Entries数据结构
map.size; // 规模度量
exercises
js
test("使用new来实例化", () => {
  expect(() => {
    Map(); // 错误的实例化,缺少new
  }).toThrow();

  const map = new Map(); // 正确的实例化
  map.set("a", 1);
  expect(new Map([["a", 1]])).toEqual(map);
  expect(map.size).toBe(1); // 实例的属性
});

原型方法

ecmaapidescribenote
2015Map.prototype.get(key)取值
2015Map.prototype.set(key,value)添加或修改一个属性
2015Map.prototype.delete(key)删除
2015Map.prototype.clear()删除所有
2015Map.prototype.has(key)是否存在
2015Map.prototype.keys()取键数组
2015Map.prototype.values()取值数组
2015Map.prototype.entries()返回迭代器对象
2015Map.prototype.forEach((key,value,map)=>{})遍历
2015Map.prototype.[Symbol.iterator]()供for...of和展开语法使用
exercises
js
test("默认就有迭代能力", () => {
  const map = new Map([
    ["a", 1],
    ["b", 2],
  ]);
  // 使用for...of迭代
  for (const [key, value] of map) {
    expect(typeof key).toBe("string");
    expect(typeof value).not.toBeUndefined();
  }
  // 使用解构符迭代
  expect(() => {
    [...map];
  }).not.toThrow();
});

Released under the MIT License.