@lizlalala
2016-09-25T03:02:38.000000Z
字数 1687
阅读 1386
es6

5和"5"是两个不同的值
两个空对象可以同时加入
NaN只能添加一个
[...new Set(array)]
操作方法
遍历方法
对象的是Object.keys()
set是set1.keys(),同set1.values()
let set1 = new Set(['red', 'green', 'blue']);//返回值相同for(let item of set1.keys())for(let item of set1.values())for(let item of set1)for (let item of set.entries()) {console.log(item);}// ["red", "red"]// ["green", "green"]// ["blue", "blue"]
用途
let a = new Set([1, 2, 3]);let b = new Set([4, 3, 2]);// 并集let union = new Set([...a, ...b]);// Set {1, 2, 3, 4}// 交集let intersect = new Set([...a].filter(x => b.has(x)));// set {2, 3}// 差集let difference = new Set([...a].filter(x => !b.has(x)));
遍历的同时进行改变
// 方法一let set = new Set([1, 2, 3]);set = new Set([...set].map(val => val * 2));// set的值是2, 4, 6// 方法二let set = new Set([1, 2, 3]);set = new Set(Array.from(set, val => val * 2));
与set的区别在于,它的成员只能是对象,也就是说,即使是通过new WeakSet(arr)定义的,arr的成员才是weakset的成员,因此如果arr只是【1,2】这种,是不行的。
接受一个数组或类似数组的对象作为参数
不是很明白的点:
弱引用
比传统的Object更为拓展,key不限于字符串
```
var m = new Map()
map.set(key,value)
//
也接受以数组作为参数
var m = new Map([[k1,v1],[k2,v2],[]])
```
set中是add delete clear has.
map中是set delete clear get
//set 返回map自身,因此可以链式调用m.set("edition", 6) // 键是字符串m.set(262, "standard") // 键是数值m.set(undefined, "nah")//get 未知则undefinedm.get('')//has(key),clear()
for (let [key, value] of map.entries()) {console.log(key, value);}// 等同于使用map.entries()for (let [key, value] of map) {console.log(key, value);}
[...map.keys()]// [1, 2, 3][...map.values()]// ['one', 'two', 'three'][...map.entries()]// [[1,'one'], [2, 'two'], [3, 'three']][...map]// [[1,'one'], [2, 'two'], [3, 'three']]
跟weakset差不多

