Object VS Maps
Object与 Maps 类似,都允许将键(key)设置为值(value)、检索这些值、删除键以及检测是否在键中存储了某些内容。由于这个原因,Object在历史上一直被用作Map。但是在某些情况下,使用 Map 有一些重要的区别。
-
Object的键是string、number和Symbol,而 Map 可以是任何值,包括函数、对象和任何原始值。
// Object 创建
const obj1 = new Object()
const obj2 = {}
const obj3 = Object.create({}) // 创建指定原型
// Map 创建
const map = new Map(); -
Map 中的键是有序的,而添加到 Object 中的键不是。因此,在对object获取key值时会按照number(升序),string, Map 对象会按插入顺序返回键。
var obj1 = {7:‘s’, ‘g’:1, [Symbol(‘c’)]:66, 1:‘q’,‘a’:‘e’}
Object.keys(obj1);//[‘1’, ‘7’, ‘g’, ‘a’] Symbol有隐藏性是不会打印出来的var map1 = new Map()
map1.set(7,‘q’)
map1.set(‘a’,0)
map1.set(Symbol(‘c’),5)
map1.set(1,‘i’)
map1.keys(); // MapIterator {7, ‘a’, 1} Symbol有隐藏性是不会打印出来的 -
对key的取值方式不一样
// 通过 . 或 []
var obj1 = {7:‘s’, ‘g