对比Map 与 Object
对比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
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第326天
- Shell-Bash变量与运算符
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法
- 我和你之前距离
- CGI,FastCGI,PHP-CGI与PHP-FPM
- 原生家庭之痛与超越