// set 是一种新的数据类型;类似数组,成员的值时唯一的
var set = new Set(); // 使用方法 生成一个空的set数据类型的容器
console.log(set)
// 类型
console.log(typeof(set)) // object
console.log(set instanceof Set) // true
console.log(set instanceof Object) //true
var set1 = new Set('hell world')
console.log(set1)
// 添加数据
/*var set1 = new Set('222') //1 is not iterable 不可以直接添加number */
var set1 = new Set('hell world') //{"h", "e", "l", " ", "w", …} 可以添加字符串
var aLi = document.getElementsByTagName('li');
var set2 = new Set(aLi)
console.log(set2) //{li, li, li, li} 可以添加类数组对象 包括arguments
var set3 = new Set([1, 2, 3])
console.log(set3) //{1, 2, 3}
var set4 = new Set([1, [1, 3]])
console.log(set4) //{ 1,[1,3]}
/* var set5 = new Set({
name: '12'
})
console.log(set5) // //1 is not iterable 不可以直接添加obj */
//使用.add方法添加数据
var set66 = new Set()
set66.add(1)
console.log(set66) //{1}
set66.add({})
set66.add({}) //
console.log(set66) //{1, {…}, {…}} 任意2个对象的地址值都不相同 所以set内可以有2个地址不同的对象
set66.add(NaN)
set66.add(NaN)
console.log(set66) //{1, {…}, {…}, NaN} NaN在set中是相同的
set66.add(+0)
set66.add(-0)
console.log(set66) //{1, {…}, {…}, NaN, 0} +0,-0在set中是相同的
// 利用set实现数组去重
Array.prototype.heavy = function() {
var set = new Set(this)
return [...set]
}
var aa = [1, 2, 3, 3, 3, 3]
console.log(aa.heavy()) //[1,2,3]
// set实例对象的属性和方法
console.log(Set.prototype) //set数据也有原型;
console.log(Set.prototype.constructor) //set的构造函数就是Set函数
// set 函数的方法
//.size 获取set成员的个数
var set12 = new Set([1, 2, 3])
console.log(set12.size) //3
// 删除数据 .delete(成员)
console.log(set12.delete(1)) //删除成功返回boolea true 不成功返回false
console.log(set12) //{2, 3}
// .has() 查找是否存在成员
console.log(set12.has(1)) // false 不存在返回false 存在返回ture
// .clear() 清除set所用成员
console.log(set12.clear()) // 返回值undefined
console.log(set12) //{} 清除了set12 身上所有成员
// set数据 转数组
Set.prototype.toArray = function() {
return [...this]
}
var set13 = new Set([1, 2, 3, 4])
console.log(set13.toArray() instanceof Array) //ture
var set14 = Array.from(set13)
console.log(set14 instanceof Array) //ture
//Set 数据的遍历方法 keys() values() entries() forEach
var sets = new Set(['apple', 'blue', 'pink'])
console.log(sets.keys()) //SetIterator {"apple", "blue", "pink"}
console.log(sets.keys() instanceof Array) //false
console.log(sets.keys() instanceof Set) //false
console.log(sets.keys() instanceof Object) //ture
// sets.keys()的返回值是一个对象 具有length 可以直接用 for。。。 of 遍历
for (var attr of sets.keys()) {
console.log(attr) //apple blue pink
}
//也可以用forEach 遍历 forEach(function(key,value,原函数)) 系统自动传3个参数
sets.forEach(function(key, value, obj) {
console.log(key) //apple blue pink
console.log(value) //apple blue pink
console.log(obj) //原数据 sets
})
//keys() 方法 返回键名
//values()方法 返回键值
//entries()方法 返回键值对 键名+键值
//由于Set数据没有键名只有键值 所以 keys() values() entries() 获得的返回值一样
// 任选其中一个进行遍历就可以了
</script>