欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ECMAScript6中Set/WeakSet詳解

 更新時(shí)間:2015年06月12日 10:39:38   投稿:hebedich  
這篇文章主要介紹了ECMAScript6中Set/WeakSet詳解的相關(guān)資料,需要的朋友可以參考下

ES6里加入了一個(gè)新數(shù)據(jù)解構(gòu)Set,和Java的Set一樣,它里面不存放重復(fù)的元素。Set實(shí)現(xiàn)為一個(gè)類,使用時(shí)需要先new。

var s1 = new Set()
s1.add(1)
s1.add(2)
s1.add(3)
s1.add(1)
 
var s2 = new Set()
s2.add('a')
s2.add('a')
 
// 輸出1,2, 3
for (var i of s1 ) {
  console.log(i)
}
// 輸出a
for (var i of s2 ) {
  console.log(i)
}

上面用Set的add方法添加元素,重復(fù)添加的,不會(huì)存進(jìn)去。

Set構(gòu)造器還可以接受數(shù)組作為參數(shù)傳入

var s3 = new Set([1,2,3,1])
s3.size // 3

可以看到重復(fù)的數(shù)字1依然沒有放進(jìn)去,另外取Set的長度使用size,不是length。

需要注意的是對(duì)于{}或[],它們是兩個(gè)同的對(duì)象

var s4 = new Set()
s4.add({})
s4.add({})
s4.size // 2

一、遍歷Set (for of)

var s1 = new Set()
s1.add(1)
s1.add(2)
s1.add(3)
 
// 輸出1,2, 3
for (var i of s1) {
  console.log(i)
}

二、把Set轉(zhuǎn)成數(shù)組

var s1 = new Set()
s1.add(1)
s1.add(2)
 
// toArray
var a1 = Array.from(s1)
Array.isArray(a1) // true
 
// or
var a1 = [...new Set(s1)] 

三、利用Set給數(shù)組去重

function distinct(arr) {
  return Array.from(new Set(arr))
// return [...new Set(arr)]
}

Set的屬性

constructor
size
Set的方法

has(val) 判斷是否存在該元素
add(val) 添加元素
delete(val) 刪除元素
clear 刪除所有元素
keys
values
entries
forEach 遍歷元素
map
filter

四、WeakSet

WeakSet和Set一樣都不存儲(chǔ)重復(fù)的元素,但有一些不同點(diǎn)

1. 只存儲(chǔ)對(duì)象類型元素

ws = new WeakSet()
ws.add(1)

FF下報(bào)錯(cuò)如下

2. 只有add/delete/clear/has三個(gè)方法,不能遍歷,沒有size屬性等

ws = new WeakSet()
ws.size // undefined
ws.forEach // undefined

MDN的解釋

WeakSet 對(duì)象中存儲(chǔ)的對(duì)象值都是被弱引用的, 如果沒有其他的變量或?qū)傩砸眠@個(gè)對(duì)象值, 則這個(gè)對(duì)象值會(huì)被當(dāng)成垃圾回收掉. 正因?yàn)檫@樣, WeakSet 對(duì)象是無法被枚舉的, 沒有辦法拿到它包含的所有元素

WeakSet主要用來儲(chǔ)存DOM節(jié)點(diǎn),當(dāng)這些節(jié)點(diǎn)從文檔移除時(shí),不會(huì)引發(fā)內(nèi)存泄漏。

以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。

相關(guān)文章

最新評(píng)論