JS中的map

116 阅读1分钟

js中的Map

  • Map是es6的新增特性,Map是一种新的集合类型,为这门语言带来了真正的键/值存储机制,Map的大多数特性都是通过Obect实现的

基本api

//创建一个空映射
const m = new Map();

//使用嵌套初始化
const m1 = new Map([
    ["key1", "val1"],
    ["key2", "val2"],
    ["key3", "val3"]
]);
console.log(m1.size); //3

// 映射期待的键/值对,无论是否提供
const m3 = new Map([
    []
]);
console.log(m3.has(undefined)); //true
console.log(m3.get(undefined)); //undefined

console.log(m.has("firstName")); //false
console.log(m.get("firstName")); //undefined
console.log(m.size) //0

m.set("firstName", "Matt")
    .set("lastName", "Frisbie");

console.log(m.has("firstName")); //true
console.log(m.get("firstName")); //Matt
console.log(m.size) //2

m.delete("firstName");

console.log(m.has("firstName")); //false
console.log(m.get("firstName")); //undefined
console.log(m.size) //1

m.clear()

console.log(m.has("firstName")); //false
console.log(m.get("firstName")); //undefined
console.log(m.size) //0

选择Object还是Map

  • 内存占用:Object和Map的工程级实现在不同浏览器间存在明显差异,但存储单个键/值对所占用的内存数量都会随键的数量线性增加
  • 插入性能:向Object和Map中插入新键/值对的消耗大致相当,不管插入Map在所有浏览器中一般会稍微快一点。
  • 查找速度:与插入不同,从大型Object和Map中查找键/值对的性能差异极小,但如果只包含少量键/值对,则Object较快。
  • 删除性能:使用delete删除Object属性的性能一直以来饱受诟病,目前在很多浏览器中仍然如此。