構造
const set = new Set([1, 2, 3, 4, 4]);
可接受的參數為所有具有iterable 接口的數據
特性:
類似數組,無重復值。
const set = new Set([1, 2, 3, 4, 4]); [...set] //1,2,3,4
注意點:
1.成員值之間的重復值判斷類似於‘===’,但是多個NaN會被判斷為相等
const set = new Set([1,NaN, NaN, 4, '4']); console.log(...set)

2.兩個對象總不相等
const set = new Set([{}, {},{name:'shyno'},{name:'shyno'}]);
console.log(...set)
3.無鍵只有值
const arr = [1,2,2,3,4,5,5,6]
let obj = {name:'shyno'}
const set = new Set(arr);
const setArr = Array.from(set)
console.log(Object.keys(arr),Object.keys(obj),Object.keys(set))

(可以看出set的鍵是空的)
4.Set並不是數組
const set = new Set([{}, {},{name:'shyno'},{name:'shyno'}]);
document.write(set[0]) //undefined
console.log(set.concat([1,2])) //set.concat is not a function
(1)Set可以用於數組去重,但是,需要把Set再轉成數組
const set = new Set([1,2,3,3,4,4,5]); const arr = Array.from(set) console.log(arr[0],arr.concat(['1','2']))

(2)Set也可以用於字符串去重
const set = new Set('aabbccdee');
const arr = Array.from(set)
console.log(arr[0],arr.concat(['1','2']))
(3)其他具有iterable 接口的數據也可以用這種方法去掉重復的值
屬性和方法
構造函數:Set.prototype.constructor
console.log(Set.prototype.constructor)

長度/尺寸/成員總數:Set.prototype.size
const arr = [1,2,2,3,4,5,5,6]
const set = new Set(arr);
const setArr = Array.from(set)
console.log('原數組長度',arr.length,'set的成員總數',set.size,'set轉數組之后的長度',setArr.length)

添加成員:add()------添加某個值,返回 Set 結構本身
const arr = [1,2,2,3,4,5,5,6]
const set = new Set(arr);
set.add(2)
const setArr = Array.from(set)
console.log(set,set.add('shyno'))

(注意這里打印出來的結果一樣,說明它的返回值就是set自身)
重復的不加,不同的數據類型也可以加
刪除成員:delete()------刪除某個值,返回一個布爾值,表示刪除是否成功
const arr = [1,2,2,3,4,5,5,6] const set = new Set(arr); const setArr = Array.from(set) console.log(set) console.log(set .delete(2)) console.log(set) console.log(set .delete(2))

(set無重復值,所以同樣的操作,只有第一次會成功)
判斷存在否:has(value)-----返回一個布爾值,表示該值是否為Set的成員
const arr = [1,2,2,3,4,5,5,6] const set = new Set(arr); const setArr = Array.from(set) console.log(set) console.log(set .has(2)) console.log(set .delete(2)) console.log(set .has(2)) console.log(set)


(這里明明打印set的時候沒有2,但是has(2)確實true,刪除操作后得到了false)
清空成員:clear()-----清除所有成員,沒有返回值
const arr = [1,2,2,3,4,5,5,6] const set = new Set(arr); const setArr = Array.from(set) console.log(set) console.log(set .clear()) console.log(set .delete(2)) console.log(set.add(2)) console.log(set .has(2)) console.log(set)

