相同点
- 都以key-value形式对数据进行存储
区别
1.key数据类型范围不同
Object:作key有number、string、symbpl;
Map:js目前所有类型;
2.key的顺序
Object:同时有三种类型:number =》string =》symbol; Map:以声明顺序;
3.创建方式
// Object
const obj1 = new Object();
const obj2 = {};
const obj3 = create();
// Map
const map = new Map();
4.key的调用方式
通过key取值:
Object:可通过 . 或 [];
Map:只能用原生的get方法进行调用;
判断是否有某个属性:
Object:'a' in obj,判断obj中是否有a这个属性;;
Map:map.has('a'),判断map中是否有a这个属性;
5.设置属性
// Object:
obj.a = 1;
obj['a'] = 1;
// Map:js目前存在的数据类型均可以作为key;
map.set('a',1);
6.删除key的方式
// Object: 一般删除对象属性的方式:
delete obj.a
// Map: 删除a属性
map.delete('a');
// 删除所有的属性;
map.clear();
7.获取size
// Object::通过Object.keys(obj) 返回一个数组,通过获取数组的长度来获取size;
Object.keys(obj);
// Map:自身带有size属性,size属性无法修改;
map.size;
8.JSON操作
Object:支持 JSON.stringify 和 JSON.parse 的操作;
Map:不支持;
9.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')() // 取决于函数的调用者;