第六章 Set
基础
set 集合类型,包含了集合的性质。
唯一性 不可放重复数据
js
set是类型严格约束
声明语句: let set = new Set();
追加: set.add()
set无key和索引,所以使用数组和对象的key和索引方法的时候都是针对set的值
与对象的区别:
对象中的属性都会转化为字符串,类似
let obj = {
1: "abc",
"1":"cde"
}
这样子是相同的东西,后边的"1"会覆盖掉前边的。
对象里使用变量需要加上[],是key加上[]。
比如:
let new_obj = {
[obj]: "content"
}
而对象是不能变成属性的,所以这一部分js内部实现机制是:
obj.toString => 添加属性
小结:
类型不同的时候可以存在多个,类型相同不能同时存在
js
数量判断: ~.size()
判断是否有: ~.has()
删除: ~.delete()
清空:~.clear()
当传参为字符串时,会将字符串展开
例如: let set = new Set("abc") =>("a","b","c")
使用场景
去重,直接去重
js
let arr = [1,23,352,412,4,1,4,23,352]
array = [...new Set(arr)];
转换
js
使用.from 转换为数组
遍历
js
~.keys()或者~.values()或者~.entries 取值
关键词处理
let obj = {
data: new Set(),
set keyword(word) {
this.data.add(word);
},
show() {
let ul = document.querySelector('[name="dem"]')
ul.innerHTML = '';
this.data.forEach(function (value) {
ul.innerHTML += `<li>${value}</li>`;
})
}
}
let input = document.querySelector("[name='dem2']");
input.addEventListener("blur", function () {
obj.keyword = this.value;
obj.show();
})
并集交集补集
js
let A = [1,2,3,4,55,512,123,2]
let B = [55,4,1,4,234,5,]
let a = new Set(A);
let b = new Set(B);
console.log(new Set([...a,...b]))
let A = new Set([1, 2, 3, 4, 55, 512, 123, 2,5]);
let B = new Set([55, 4, 1, 4, 234, 5,]);
// let a = new Set(A);
// let b = new Set(B);
// console.log(new Set([...a,...b]))
console.log(new Set([...A].filter(function (item) {
return B.has(item);
})))
WeakSet
javascript
与Set类型一样,不能有重复的值(针对引用类型)。
let set = new WeakSet(["a","b"]);这样是报错的,因为[]内无论多少个值,都会被当称字符串
键必须为对象
需要改成:
let set = WeakSet();
set.add([blabla]);
Dom元素&节点对象,
引用类型垃圾回收
js
赋值为空&删除:
let variable = null;
引用类型的垃圾回收机制就是根据引用次数是否为0,而进行是否在内存中所删除或者继续留着varibale
每当引用类型进行传址时,都会计算+1
WeakSet特性
JavaScript
对弱引用有影响的都不能使用的都用不了。
只用来保存对象数据,没有其它特殊功能。
弱引用类型,keys,values等都无法使用