@lizlalala
2016-09-25T11:02:38.000000Z
字数 1687
阅读 1108
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 未知则undefined
m.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差不多