一、Map
Map对象是一种有对应 键/值 对的对象, JS的Object也是 键/值 对的对象 ;
ES6中Map相对于Object对象有几个区别:
1、Object对象有原型
, 也就是说他有默认的key值在对象上面, 除非我们使用Object.create(obj)创建一个没有原型的对象;
2、在Object对象中, 只能把String和Symbol作为键名。
但是在Map中,键名可以是任何基本数据类型
(String, Number, Boolean, undefined, Null),或者对象(Map, Set, Object, Function , Array,Symbol );
3、通过Map中的size属性
, 可以很方便地获取到Map长度, 要获取Object的长度, 你只能用别的方法了;
4、Map实例对象的key值可以为一个数组或者一个对象,或者一个函数,比较随意 ,而且Map对象实例中数据的排序是根据用户push的顺序进行排序的
, 而Object实例中key,value的顺序就是有些规律的, (他们会先排数字开头的key值,然后才是字符串开头的key值);
Map对象实例的方法:
set(key, value)
, 给Map对象设置key/value 键/值对, 返回这个Map对象(相对于Javascript的Set,Set对象添加元素的方法叫做add(),而Map对象添加元素的方法为set(key, value);
clear()
, 删除所有的键/值对;
delete(key)
, 删除指定的键/值对;
entries()
,返回一个迭代器, 迭代器按照对象的插入顺序返回[key, value];
forEach(callback , context)
, 循环执行函数并把键/值对作为参数;context为执行函数的上下文this;
get(key)
,返回Map对象key相对应的value值;
has(key)
,返回布尔值, 其实就是返回Map对象是否有指定的key;
keys()
,返回一个迭代器,迭代器按照插入的顺序返回每一个key元素;
.size
属性, 可以很方便地获取到Map长度;
1、通过set(key, value)添加数据
let myMap = new Map();
let keyString = "a string key",
keyObj = {},
keyFunction = function(){};
//给myMap对应的键名添加键值
myMap.set(22,66);
myMap.set(keyString,"字符串");
myMap.set(keyObj,"对象");
myMap.set(keyFunction,"函数");
console.log(myMap.size); //4
console.log(myMap); // {22 => 66, "a string key" => "字符串", {…} => "对象", ƒ => "函数"}
//获取键值
console.log(myMap.get(keyString)); // 字符串
console.log(myMap.get(keyObj)); // 对象
console.log(myMap.get(keyFunction)); // 函数
//如果不通过变量来存储那些复杂的数据类型,而是直接获取他们的键值会是undefined
console.log(myMap.get("a string key")); // 字符串
console.log(myMap.get({})); // undefined
console.log(myMap.get(function(){})); // undefined
2、通过参数来添加默认数据:(注意格式一定要对,不然会报错!
)
let keyString = "a string key",
keyObj = {},
keyFunction = function(){};
let myMap = new Map( [ ["a string key",123],[keyObj,456],[keyFunction,666],[22,66] ])
console.log(myMap); // {"a string key" => 123, {…} => 456, ƒ => 666, 22 => 66}
二、WeakMap
WeakMap是弱引用的Map对象, 如果对象在js执行环境中不存在引用的话,相对应的WeakMap对象内的该对象也会被js执行环境回收;
WeakMap对象内键名
必须是对象(即typeof类型是object)!!
WeakMap对象的无.size
属性。
WeakMap对象的方法:
delete(key)
: 删除指定的键/值对;
get(key)
:返回WeakMap对象key相对应的value值;
has(key)
:返回布尔值, 其实就是返回WeakMap对象是否有指定的key;
set(key,value)
:给WeakMap对象设置key/value 键/值对, 返回这个WeakMap对象;