对比Map 与 Object
键名
/**-------------------- Map --------------------*/
Map键名可以是任何类型
const map = new Map(
[
[1, '111'],
['a', 'aaa'],
[true, true],
[{x: 1}, 'object'],
[null, 'null'],
[undefined, 'undefined']
]
)
/**------------------- Object ------------------*/
Object键名只能是字符串 (Object会默认将键名转化为字符串格式)
创建
/**------------------- Map --------------------*/
const map = new Map() // new 关键字创建
/**------------------ Object ------------------*/
const obj = new Object() // new 关键字创建
const obj = {} // 直接赋值
const obj = Object.create() // 使用create创建
// 函数式创建
function Person(name, age){
this.name = name;
this.age = age;
}
const obj = new Person()
新增元素
/**-------------------- Map --------------------*/
// 创建时塞入集合整体
const map = new Map(
[
[1, '111'],
['a', 'aaa'],
[true, true]
]
)
// 链式设置
const map = new Map()
.set(1, '111')
.set('a', 'aaa')
.set(true, true)
// set单个设置
const map = new Map()
map.set(1, '111')
map.set('a', 'aaa')
map.set(true, true)
/**-------------------- Object -------------------*/
// 常用赋值方式--> object.key / object[key]
const obj = {}
obj.a = 'aaaa'
obj['1'] = 1111
// new关键字创建时塞入对象
const obj = new Object(
{
1: '111',
a: 'aaa',
true: true
}
)
// 直接赋值
const obj = {
1: '111',
a: 'aaa',
true: true
}
// 使用create创建时塞入对象
const obj = Object.create(
{
1: '111',
a: 'aaa',
true: true
}
)
// 函数式创建时,this指定赋值
function Person(name, age){
this.name = name;
this.age = age;
}
const obj = new Person()
获取元素
/**-------------------- Map --------------------*/
const map = new Map(
[
[1, '111'],
['a', 'aaa'],
[true, true]
]
)
map.get(1)
map.get('a')
map.get(true)
/**-------------------- Object -------------------*/
const obj = {
1: '111',
a: 'aaa',
true: true
}
obj.a // object.key
obj[1] // object[key]
删除元素
/**-------------------- Map --------------------*/
const map = new Map(
[
[1, '111'],
['a', 'aaa'],
[true, true]
]
)
map.delete('a') // 单个删除
map.clear() // 清除所有元素
/**-------------------- Object -------------------*/
let obj = {
1: '111',
a: 'aaa',
true: true
}
delete obj[true] // 单个删除
obj = {} // 清空所有元素
判断某个元素是否存在
/**-------------------- Map --------------------*/
const map = new Map(
[
[1, '111'],
['a', 'aaa'],
[true, true]
]
)
map.has('a') // 返回布尔值
/**-------------------- Object -------------------*/
let obj = {
1: '111',
a: 'aaa',
true: true
}
// 返回undefined则不存在
obj.a
obj[1]
长度
/**-------------------- Map --------------------*/
const map = new Map()
map.size
/**-------------------- Object -------------------*/
const obj = new Object()
Object.keys(obj).length
遍历方法
/**-------------------- Map --------------------*/
const map = new Map(
[
[1, '111'],
['a', 'aaa'],
[true, true]
]
)
// keys
map.keys() // { 1, 'a', true }
// values
map.values() // { '111', 'aaa', true }
// entries
map.entries() // { [ 1, '111' ], [ 'a', 'aaa' ], [ true, true ] }
// forEach
map.forEach(
(value, key, map) => console.log(value, key, map)
)
// 111 1 Map(3) { 1 => '111', 'a' => 'aaa', true => true }
// aaa a Map(3) { 1 => '111', 'a' => 'aaa', true => true }
// true true Map(3) { 1 => '111', 'a' => 'aaa', true => true }
// for...of
for (const [key, value] of map) { console.log(key, value) }
// 1 111
// a aaa
// true true
/**-------------------- Object -------------------*/
// for...in
const obj = {
1: '111',
a: 'aaa',
true: true
}
for (const key in obj) {
console.log(key)
}
// 1
// a
// true
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。