ES6學習筆記(四)【正則,集合】
簡介
ES6對正則的擴充套件不多,而且幾乎全都是用不到的擴充套件
這一節內容會很少,但是正則依舊很常用,很重要
正文
ES6為正規表示式新增了flags
屬性,會返回正規表示式的修飾符
/abc/ig.flags
// 'gi'
以前,js只支援先行斷言(lookahead)和先行否定斷言(negative lookahead)
不支援後行斷言(lookbehind)和後行否定斷言(negative lookbehind)
而在其他指令碼語言(PHP,Python等)中,都支援後行斷言和後行否定斷言
因此現在有一個提案,未來版本的js中會加入這一缺失的功能,V8 引擎已經支援此功能
思考
這部分內容希望你都可以手動敲一遍,獨立思考
瞭解正則中的先行、後行斷言麼,試著Google一下了解這個知識點
多數主流程式語言都提供了若干種複雜資料結構,而在ES6以前,js只有陣列和物件兩種
ES6為了彌補這一方面的不足,引入了四種新的資料結構
它們分別是:對映(Map
)、集合(Set
)、弱集合(WeakSet
)和弱對映(WeakMap
)
正文
Set類似陣列,但是成員的值都是唯一的,沒有重複的值
let set = new Set([1, 2, 3, 3])
console.log(set)
// Set(3) {1, 2, 3}
[...set]
// [1, 2, 3]
我們可以通過給Set建構函式傳入一個陣列來建立一個set,陣列中的重複值被自動刪除
set常用的方法不多,常見的有以下幾種
add(value)
:新增某個值,返回Set結構本身delete(value)
:刪除某個值,返回一個布林值,表示刪除是否成功has(value)
:返回一個布林值,表示該值是否為Set
的成員clear()
:清除所有成員,沒有返回值
另外,set
通過size
屬性拿到內部成員的個數,而不是陣列的length
let set = new Set()
set.add(1).add(2).add(2)
set.size // 2
set.delete(2)
set.has(2) // false
set.clear()
set.size() // 0
陣列的forEach方法也可以用來遍歷set,用法相同這裡不再敘述
Map類似二維陣列,是鍵值對的集合,但是書寫方式稍微有不同
let map = new Map([
['a', '1'],
['b', '2']
])
console.log(map)
// Map(2) {"a" => "1", "b" => "2"}
與Set相同,Map也用size屬性表示內部有多少個鍵值對
但是從Map中新增,獲取值使用set,get方法,其他的has,delete方法與Set相同
let m = new Map()
let o = {p: 'Hello World'}
m.set(o, 'content')
m.get(o) // "content"
m.has(o) // true
m.delete(o) // true
m.has(o) // false
對比js物件的優勢是,Map可以使用任意值作為鍵值,包括物件(上面程式碼中的o)
WeakSet
與WeakMap
不常用,顧名思義,可以理解為更弱的Set和Map,功能少,而且容易被垃圾回收(記憶體消耗低)
思考
這部分內容希望你都可以手動敲一遍,獨立思考
使用Set寫一個陣列去重的方法
接受一個陣列引數,並返回一個沒有重複值的原陣列
let set = new Set()
let a = NaN
let b = NaN
let c = {}
let d = {}
set.add(a).add(b).add(c).add(d)
此時set.size應該輸出幾?試著解釋為什麼會是這個結果
ES6引入了一種新的原始資料型別Symbol
,表示獨一無二的值
它是JavaScript語言的第七種資料型別,前六種是:
Undefined、Null、布林值(Boolean)、字串(String)、數值(Number)、物件(Object)
正文
Symbol
值與字串類似,可以當做物件的屬性名
因為Symbol
都是獨一無二的,所以可以保證不會與其他屬性名產生衝突
Symbol值通過Symbol
函式生成,Symbol
函式可以接受一個字串作為引數,表示對Symbol的描述
主要用於除錯的時候方便區分不同的Symbol值
let aaa = Symbol('a')
let bbb = Symbol('b')
let obj = {
[aaa]: 'Hello!',
[bbb]: 'World!'
}
console.log(obj)
// Object {Symbol(a): "Hello!", Symbol(b): "World!"}
obj[aaa]
// "Hello!"
obj[bbb]
// "World!"
思考
這部分內容希望你都可以手動敲一遍,獨立思考
如何判斷一個值是否是Symbol
?
試著寫出一個function,接受一個任意值作為引數,返回它的資料型別
資料型別一共七種,在本節的簡介裡提到過
相關文章
- JavaScript正則學習筆記JavaScript筆記
- ES6 學習筆記四筆記
- 學習筆記:深度學習中的正則化筆記深度學習
- 學習筆記——正則匹配方法整理筆記
- 正規表示式學習筆記(1)-認識正則筆記
- HexMap學習筆記(四)——不規則化筆記
- 正則學習小記
- Java 集合學習筆記Java筆記
- 正則筆記筆記
- es6學習筆記筆記
- ES6 學習筆記筆記
- ES6 學習筆記筆記
- 機器學習筆記——模型選擇與正則化機器學習筆記模型
- 吳恩達機器學習筆記 —— 8 正則化吳恩達機器學習筆記
- 【Java學習筆記】Collections集合Java筆記
- 筆記bs,正則筆記
- ES6 學習筆記一筆記
- ES6 學習筆記二筆記
- ES6 學習筆記三筆記
- ES6的學習筆記筆記
- 集合冪級數學習筆記筆記
- TS學習筆記(四)筆記
- ONNXRuntime學習筆記(四)筆記
- springboot 學習筆記(四)Spring Boot筆記
- goLang學習筆記(四)Golang筆記
- ES6學習筆記--es6簡介筆記
- 前端學習筆記之ES6~~~前端筆記
- ES6學習筆記(七)【class】筆記
- ES6學習筆記(八)【class】筆記
- ES6學習筆記(九)【class】筆記
- ES6學習筆記之Function筆記Function
- Java中的Map集合學習筆記Java筆記
- python學習筆記24_集合set( )Python筆記
- JS 正則學習JS
- DP學習筆記(四)(2024.10.2)筆記
- c++學習筆記(四)C++筆記
- 四元數 學習筆記筆記
- activiti學習筆記(四)managementService筆記