Map和Set很相似;
1,Map对象,存储键值对;跟Object对象的区别;以及Map的使用(Map或者Map实例有哪些方法或属性?)
Map相对Object:Map是有序的,会按添加的顺序输出,Object无序(ES2015之后,字符串的键会按大小排序);Map的键可以是任意值,Object的只能是字符串或Symbol或数字;Map对象有个size属性以获取map对象的条数,Object对象不能直接获取属性个数需要手动计算;Map对象的键值对不会与原型对象的冲突,因为Map对象的键值对是存储在一个[[Entries]]属性中而不是直接在对象上,所以Map对象的操作也是作用在[[entries]],通过set添加的键值对不能用属性访问的方式获得,Object对象的键值对可能与原型链的冲突(ES5,Object.create(null)可以创建一个没有原型的对象{});据说Map的添加删除的性能比Object的要高效;Map和Object都可以以NaN作为键,而且认为所有NaN都是相等的,虽然在JS中,NaN!==NaN;
//Map的使用----------------
//Map必须当作构造函数被调用,即使用new操作符 ------------
// Map();
// //Uncaught TypeError: Constructor Map requires 'new'
//Map的创建,可以传入Map构造函数的有哪些类型, ----------
//var map1 = new Map();
// var map2 = new Map('string');
// //Uncaught TypeError: Iterator value s is not an entry object
// var map3 = new Map({e: 'e'});
// //Uncaught TypeError: object is not iterable (cannot read
//property Symbol(Symbol.iterator))
// var map4 = new Map([4, 6]);
// //Script snippet %234:9 Uncaught TypeError: Iterator value 4 is not an entry object
// var map5 = new Map(4);
// //Uncaught TypeError: number 4 is not iterable (cannot read
//property Symbol(Symbol.iterator))
//由此可见可以传入Map构造函数的是个entry对象,可以是个Map对象, --------------------
//也可以是Set对象,还可以是二维数组
var map = new Map();
map.set('test', {test: 'test'});
map.set('ha', 'haha');
var anotherMap = new Map(map);//相当于shadow copy map的键值对
console.log(anotherMap);
//
//Map实例的方法和属性,很多是原型上的方法 --------------------
//map.set(key, value):添加或修改已有条目,返回实例本身;
anotherMap.set('dage', 'dage'); //此时 anotherMap.size=