ES6---新增数据结构set、map


set:

let set=new Set();
typeof set;//Object,其数据类型为Object,但是其结构类似数组;
/

let set=new Set([1,2,3]);//set接收数组参数
console.log(set);//Set {1, 2, 3}
for(let i of set){console.log(i)};//1,2,3 可以通过for...of对set对象进行遍历,说明其内部有iterator接口
set[Symbol.iterator];//function


let set=new Set([,1,2,3,1,2,4]);//Set {undefined, 1, 2, 3, 4},set对象内部自动去重
let set2=new Set();
[1,2,3,1,2,2].map(i=>set2.add(i));
console.log(set2);//Set {1, 2, 3},set可以通过add方法推入成员,如同array.push()


new Set(['1',1]);//Set {"1", 1}
new Set([{},{}]);//Set {Object {}, Object {}}
new Set([{},{},1,'1']).size;//4,上面说到set对象不允许重复数据出现,但是它却不会对数据进行类型转换,可以通过size查看set对象的长度

//
new Set([1]).has(1);;//true
new Set([1,{}]).has({});;//false,has方法返回是否参数为成员的布尔值

new Set([1]).delete(1);;//true
new Set([1]).delete(2);//false,delete方法返回是否成功删除参数的布尔值

new Set([1]).add(2);//Set {1, 2},add方法用于添加新的成员,返回增加成员之后的set

new Set([1]).add(2).keys();//SetIterator {1, 2},keys用于遍历set对象键名并返回iterator接口,同样的,values返回值的iterator,entries返回成员键值对的iterator

WeakSet:

weakset数据结构类似于set结构,但是其成员只能是对象,weakset是不可遍历的!

new WeakSet(1);//报错
new WeakSet('a');//报错
new WeakSet(Symbol());//报错
new WeakSet([1]);//报错
new WeakSet([{a:1}]);//WeakSet {Object {a: 1}},对象数组可以赋值
new WeakSet([[1],[2]]);//WeakSet {[2], [1]},嵌套数组依然能够成功赋值
new WeakSet({a:1});//报错
new WeakSet([{a:1}]);//WeakSet {Object {a: 1}}
/weakset结构,成员必须是object类型,且以数组形式赋值

map:

es6新增的map数据结构,类似于对象,但是属性不仅限于字符串,什么类型都可以当做属性名

let divs=document.querySelectorAll('div');
let map=new Map();
map.set(divs,1234);//set赋值的时候,接收键值对作为参数
map.get(divs);//1234,set用来给map对象赋值,get用于取值
map.size;//1 size用于获取map对象长度
map.has(divs);//true 返回是否包含参数项的布尔值
map.delete(divs);//rue 返回是否成功删除参数项的布尔值

//////////
new Map(Symbol());//报错
new Map(12);//报错
new Map({})//报错
new Map([]);//Map{}
///
new Map([1]);//报错
new Map([1,2]);//报错
new Map([[1,2]]);//Map {1 => 1}
new Map([['a',1]]).get('a');//1
////map数据结构,接收嵌套键值对数组的数组作为参数,进行初始化map对象


let s1=[1];
let s2=[1];
let map=new Map();
map.set(s1,2);
map.set(s2,3);
map.get(s1);//2
map.get(s2);//3
///map结构的属性是绑定于内存地址的,所以map.get(s1)与map.get(s2)得到的值不一样

///map结构的遍历和set结构的近似,keys(),values(),entries(),forEach()

/////////////////////
[...new Map([[1,2],[3,4]])];//[[1,2],[3,4]],map数据结构通过扩展运算符转为数据类型

WeakMap:

WeakMap与Map结构类似,区别就是它只接受对象作为属性名


new WeakMap([[{},2]]);// WeakMap{Object {} => 2}
new WeakMap([[1,2]]);//报错
new WeakMap([['a',2]]);//报错
new WeakMap([[Symbol(),2]]);//报错

与map相似,WeakMap结构也有has,get,set等方法,但是它不能被遍历,没有keys(),values(),entries(),forEach方法

你可能感兴趣的:(ES6)