object 和map 的区别
相同点:
二者都是以key-value形式对数据存储
不同点;
key的数据类型范围不同
Object可以作为key的有String,Number,symbol
map:目前js的数据类型都可以作为key
key的顺序不同
Object:如果对象的key中同时存在String,Number,Symbol,通过Object,keys得到的顺序是Number(升序)-->String(symbol)(以创建的顺序)
map:key按声明的顺序进行排序
创建方式不同
Object:
const obj1=new Object()
const obj2={}
const obj3=Object.create({})
Map:
const map=new Map()
key值调用的方式不同
通过key取值:
Object:可通过 . 或 []
Map:只能用原生的get方法进行调用;
判断是否有某个属性
Object:'a' in obj;判断obj中是否有a这个属性;
Map:map.has('a');判断map中是否有a这个属性;
设置属性的方式不同
Object:
1.obj.a = 1;
2.obj['a'] = 1;
Map:js目前存在的数据类型均可以作为key;
1.map.set('a',1)
删除key的方式不同
Object: 自身没有删除属性的方法;一般删除对象属性的方式: delete obj.a
Map: map.delete('a') ----删除a属性;
map.clear() ----删除所有的属性;
获取size
Object: 通过Object.keys(obj) 返回一个数组,通过获取数组的长度来获取size;
Map: 自身带有size属性;map.size,size属性无法修改;
迭代
map: 拥有迭代器,可以通过for-of forEach去直接迭代元素,遍历顺序是确定的
object: 并没有实现迭代器,需要自行实现,不实现只能通过for-in循环去迭代,遍历顺序是不确定的
如何判断一个数据是否可以迭代的方式
typeof [][Symbol.iterator] //function
typeof new Map()[Symbol.iterator] //function
typeof {}[Symbol.iterator] //undefined
typeof 1[Symbol.iterator] //undefined
JSON操作
Object: 支持JSON.stringify和JSON.parse的操作;
Map: 不支持;
this不同
const f = function(){ console.log(this) }
Object:
const obj = {fn:f}
Map:
const map = new Map()
map.set('fn',f)
obj.fn() //指向obj
map.get('fn')() //取决于函数的调用者;
二者都是以key-value形式对数据存储
不同点;
key的数据类型范围不同
Object可以作为key的有String,Number,symbol
map:目前js的数据类型都可以作为key
key的顺序不同
Object:如果对象的key中同时存在String,Number,Symbol,通过Object,keys得到的顺序是Number(升序)-->String(symbol)(以创建的顺序)
map:key按声明的顺序进行排序
创建方式不同
Object:
const obj1=new Object()
const obj2={}
const obj3=Object.create({})
Map:
const map=new Map()
key值调用的方式不同
通过key取值:
Object:可通过 . 或 []
Map:只能用原生的get方法进行调用;
判断是否有某个属性
Object:'a' in obj;判断obj中是否有a这个属性;
Map:map.has('a');判断map中是否有a这个属性;
设置属性的方式不同
Object:
1.obj.a = 1;
2.obj['a'] = 1;
Map:js目前存在的数据类型均可以作为key;
1.map.set('a',1)
删除key的方式不同
Object: 自身没有删除属性的方法;一般删除对象属性的方式: delete obj.a
Map: map.delete('a') ----删除a属性;
map.clear() ----删除所有的属性;
获取size
Object: 通过Object.keys(obj) 返回一个数组,通过获取数组的长度来获取size;
Map: 自身带有size属性;map.size,size属性无法修改;
迭代
map: 拥有迭代器,可以通过for-of forEach去直接迭代元素,遍历顺序是确定的
object: 并没有实现迭代器,需要自行实现,不实现只能通过for-in循环去迭代,遍历顺序是不确定的
如何判断一个数据是否可以迭代的方式
typeof [][Symbol.iterator] //function
typeof new Map()[Symbol.iterator] //function
typeof {}[Symbol.iterator] //undefined
typeof 1[Symbol.iterator] //undefined
JSON操作
Object: 支持JSON.stringify和JSON.parse的操作;
Map: 不支持;
this不同
const f = function(){ console.log(this) }
Object:
const obj = {fn:f}
Map:
const map = new Map()
map.set('fn',f)
obj.fn() //指向obj
map.get('fn')() //取决于函数的调用者;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?