【JS】Object和Map的区别(图文详解)

Object和Map

Object和Map两者的比较

Object:Object是最常用的一种引用类型数据,可用于存储键值对的集合,在ECMAScript 1st中添加

Map:Map是键值对的集合,采用Hash结构存储,在ES6中新增

共同点

共同点:键值对的动态集合,支持增加和删除键值对

Object:

const obj = {	//定义
	a:1,
	b:2
}
obj.c = 3;  	//添加键值对
delete obj.c; 	//删除键值对

Map:

const map = new Map()	//定义
map.set('a',1);			//添加键值对
map.set('b',2);
map.delete('a');  		//删除键值对

不同点

1、构造方式

Object

1const obj = {
    a:1,
	b:2
}
2const a = new Object()
3const a = Object.create()

Map

1、
const m = new MAp()
2、
const m = new MAp([
	['a','1'],
	['b','2'],
])
2、键的类型

Object

键类型必须是String或者Symbol,如果非String类型,会进行数据类型转换
在这里插入图片描述

Map

键类型可以是任意类型,包括对象,数组,函数等,不会进行类型转换
在这里插入图片描述

在添加键值对是,通过严格相等(===)来判断键属性是否已经存在
在这里插入图片描述

3、键的顺序

Object

key是无序的,不会按照添加的顺序返回

1、对于大于等于0的整数,会按照添加的顺序返回;对于小数和负数会当作字符串处理

2、对于String类型,按照定义的顺序进行输出,并且数字优于字符串

3、对于Symbol类型,会直接过滤,不会进行输出

如果想要输出,可以通过**Object.getOwnPropertySymbols()**方法

Map

key是有序的,按照插入的顺序进行返回
在这里插入图片描述

4、键值对大小

Object

只能手动计算,通过Object.keys()方法或者for…in循环统计

Map

直接通过size属性访问
在这里插入图片描述

5、键值对访问

Object
在这里插入图片描述

Map
在这里插入图片描述

6、迭代器

Object:本身并不具备lterator特性,默认情况下不能使用for…of进行遍历

Map:MAp结构的keys(),values(),entries()方法返回值都具有lterator特性
在这里插入图片描述

7、JSON序列化

Object类型可以通过**JSON.stringify()**进行序列化操作
在这里插入图片描述

Map结构不能直接进行JSON序列化,但是可以通过Array.from()来将map转换成数组,然后通过**JSON.stringify()**进行序列化操作
在这里插入图片描述

Object和Map适用场景

Object

1、仅做数据存储,并且属性仅为字符串或者Symbol

2、需要进行序列化转换为json传输

3、当作一个对象的实例,需要保留自己的属性和方法

Map

1、会频繁更新或删除键值对

2、存储大量的数据,尤其是key类型未知的情况下

3、需要频繁的进行迭代处理

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript中,ObjectMap都是用来存储键值对的数据结构,但它们有一些区别。 1. 定义方式不同: ObjectJavaScript的一个内置对象,用字面量形式定义,可以包含任何类型的属性,例如: ```javascript const obj = { name: 'John', age: 20, address: 'New York' } ``` Map是ES6引入的新数据结构,通过构造函数来定义,只能存储键值对,其中键可以是任何类型,例如: ```javascript const map = new Map() map.set('name', 'John') map.set('age', 20) map.set('address', 'New York') ``` 2. 键的类型不同: Object只能使用字符串或Symbol类型作为键,例如: ```javascript const obj = { 'name': 'John', [Symbol('age')]: 20 } ``` Map可以使用任何类型作为键,例如: ```javascript const map = new Map() map.set('name', 'John') map.set(1, 'one') map.set(true, 'true') ``` 3. 键值对的数量不同: Object中键值对的数量没有限制,可以存储任意多个键值对。 Map中键值对的数量是有限制的,但是它可以更好地处理大量的键值对。 4. 遍历方式不同: Object可以使用for...in、Object.keys()、Object.values()、Object.entries()等方式遍历。 Map可以使用for...of、forEach()等方式遍历。 总之,ObjectJavaScript的内置对象,用于存储任意类型的属性和值,而Map是ES6引入的新数据结构,用于存储键值对,其中键可以是任何类型。在使用时应根据具体的场景和需求选择合适的数据结构。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值