JS中 Object 与 Map 的区别

本文探讨JavaScript中Object和Map的区别,包括键的类型限制(Object只接受字符串或Symbol,Map可接受任意类型),遍历方式(Object通过for...in, Object.keys等,Map使用entries, keys, values等),以及Map的特有方法。" 83070493,7627031,Gradle任务配置与实战,"['Gradle', '任务配置', '构建脚本', 'Java开发', '软件工程']
摘要由CSDN通过智能技术生成

概述

  • 在很多时候,我们都把Object当成Map来使用,例如

  • 使用Object

let dict = {
	'hello': '你好',
	'world': '世界'
}

console.log(dict['hello'], dict['world'])
// 你好 世界
  • 使用Map
let dict = new Map([
	['hello', '你好'],
	['world', '世界']
])

console.log(dict.get('hello'), dict.get('world'))
// 你好 世界
  • 从功能上看,它们都可以维护键值对的映射关系,并且完成同样的任务。
  • 本文总结它们的不同之处。

键的类型不同


Object
  • Object 只能使用字符串类型(现在还有Symbol)的值作为键,如下
let key = {k: 'v'}

let obj = {}
obj[key] = 'value'

obj[key]	// "value"
obj[key.toString()]	// "value"
obj["[object Object]"]	// "value"

let fn = ()=>{}
dict[fn] = 'function'

dict[()=>{}]	// "function"
dict[(()=>{}).toString()]	// "function"
dict["()=>{}"]	// "function"


obj[123] = 123
obj['123']	// 123

  • 可以看到,不管我们传入什么类型的键,最终都会被转换成字符串类型,具体来说就是会先对键调用toString()方法,再用其返回值作为最终的键

  • 注:Symbol类型例外

let dict = {}

dict[Symbol(123)] = 123
dict[Symbol(123)] = 234

在这里插入图片描述

Map
  • Map 可以使用任意类型的值作为键,如下
let dict = new Map()

let x = {}
let y = {}
let z = ()=>{}
let a = ()=>{}

dict.set(x, 'objx')
dict.set(y, 'objy')
dict.set(z, 'fnz')
dict.set(a, 'fna')

在这里插入图片描述

  • 使用Map时,用引用类型的值作为键,并没有像Object那样,将其转换为字符串再作为键,而是直接作为键使用

遍历方式不一样


Object
  • Object 可以通过 Object.keysObject.valueObject.entriesfor...in等遍历拿到键或者值,如下
let dict = {
	'hello': '你好',
	'world': '世界'
}
Object.keys(dict)
Object.values(dict)
Object.entries(dict)

for (let k in dict) {
    console.log(k)
}

在这里插入图片描述

Map
  • Map可以通过 this.keysthis.valuesthis.entriesfor...of等遍历拿到键或者值,如下
let dict = new Map([
	['hello', '你好'],
	['world', '世界']
])
dict.keys()
dict.values()
dict.entries()

for (let entry of dict) {
    console.log(entry)
}

在这里插入图片描述

  • 注意,Object使用前三个方法,得到的返回值是数组对象,而Map使用前三个方法得到的返回值是迭代器对象

Map的常用方法


  • Map相比于Object,是以字典的身份出道的,那么它就存在一些字典特有的方法,如下图
    在这里插入图片描述
  • 依次演示一下
let dict = new Map([
	['hello', '你好'],
	['world', '世界']
])

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tanleiDD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值