ES6内置对象 - Map

本文详细介绍了JavaScript中Map对象的特点,如其键值对的灵活性、有序性以及与Object的区别。讲解了Map的创建、操作(如清空、删除、获取大小、键值集合、迭代等)以及浅拷贝和深拷贝的区别。
摘要由CSDN通过智能技术生成

Map(Map对象保存键值对,键值均不限制类型)

特点:

  • 有序(Set集合是无序的);
  • 键值对(键可以是任意类型);
  • 键名不能重复(如果重复,则覆盖)
1、创建Map对象(.set & .get获取其值)
// 如下图
let m = new Map();

// 键值对(键可以是任意类型)
let m2 = new Map([[1,'a'],['2',1],['b',new Set('123')]]);

// 键名不能重复(如果重复,则覆盖)
let m3 = new Map([[1,'a'],['2',1],['b',new Set('123')],['2',44]]);

// 注:还可以set来创建 添加 重置Map对象,然后通过get获取
m3.set('c',undefined);
console.log(m3); // Map(4) {1 => 'a', '2' => 44, 'b' => Set(3), 'c' => undefined}

m3.get(1);
console.log(m3); // 'a'

Map和Object的区别:

  • JavaScript 的对象(Object)本质上是键值对的集合(Hash 结构),但是传统上 Object 的键只能是字符串或者 Symbols(我尝试用number类型也是可以做键值的,但是不能 . 获取,只能 [] 取值),这给它的使用带来了很大的限制。而Map对象的键可以是任意类型元素(基本类型、引用类型或者函数等等),是一组一组的key valued 的值;
  • Map 中的键值是有序的(FIFO 原则),而添加到对象中的键则不是;
  • Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数是length属性获取。
  • Object 都有自己的原型,原型链上的键名有可能和在对象上的设置的键名产生冲突。
2、Map对象清空
//m2 为 new Map([[1,'a'],['2',1],['b',new Set('123')]]);
m2.clear();
 3、Map对象删除(.delete(key))
let m2 = new Map([[1,'a'],['2',1],['b',new Set('123')]]);
m2.delete('2');
console.log(m2); //Map(2) {1 => 'a', 'b' => Set(3)}
 4、Map对象个数、键集合、值集合 、has()
let m = new Map([[1,'a'],['2',1],['b',new Set('123')]]);

//个数
m.size;  //3

//键集合
m.keys(); // MapIterator {1, '2', 'b'}

//值集合
m.values(); // MapIterator {'a', 1, Set(3)}

//注:Set 的 has 方法用于查找值;Map 的 has 方法用于查找键名
m.has(1) // true
5、Map对象迭代
let m = new Map([[1,'a'],['2',1],['b',new Set('123')]]);

m.forEach((val,key)=>{ 
  console.log(key +','+val); 
})

或者

for (var [key, value] of m) {
  console.log(key + " , " + value);
}

抑或 
 
for (var [key, value] of m.entries()) {
  console.log(key + " , " + value);
}

// 打印:1,'a'
//       2,1
//       b,[object Set]

如下图及前文,可以看出.key(),.values(),.entries()等方法返回是迭代器对象 ,可以使用 for of遍历。迭代器接口本质就是调用迭代器对象的next方法,指针会依次指向内部成员。(迭代器之后再详细介绍。。。)

6、其他
let m = new Map([[1,'a'],['2',1],['b',new Set('123')]]);

let m1 = m; // m1浅拷贝,没有重新分配空间,只是索引指向同一处,所以 ===
let m2 = new Map(m); // m2是深拷贝,在内存里新开辟了一个空间去存相同的值,不===

//Map对象解构出来是存储键值对的二维数组 ,可以利用其合并Map集合等
//与Set一样,也可用Array.from 函数
let m3 = [...m]; 
// (3) [Array(2), Array(2), Array(2)]  
// [[1,'a'],['2',1],['b',new Set('123')]]

欢迎互相学习查漏补缺呀~

参考:

ES6内置对象的新方法新特性

ES6--内置对象(Map与Set、字符串、数值、对象、数组)

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值