1.數(shù)值分割符
ES2021 引入了數(shù)值分割符 _
块蚌,在數(shù)值組之間提供分隔肋乍,使一個(gè)長(zhǎng)數(shù)值讀起來(lái)更容易绳慎。
let num = 200_000_000
console.log(num) // 輸出結(jié)果 200000000
let num2 = 0.1_000_999
console.log(num2) // 輸出結(jié)果 200000000
除十進(jìn)制之外兵怯,二進(jìn)制和十六進(jìn)制也可以使用該分隔符:
0x11_1 === 0x111 // true 十六進(jìn)制
0b11_1 === 0b111 // true 二進(jìn)制
2.零合并操作符
零合并操作符 ??
是一個(gè)邏輯操作符彩匕,當(dāng)左側(cè)的操作數(shù)為 null
或者 undefined
時(shí),返回右側(cè)操作數(shù)媒区,否則返回左側(cè)操作數(shù):
params1 ?? params2
與||
的區(qū)別:
||
是一個(gè)布爾邏輯運(yùn)算符推掸,左側(cè)操作數(shù)會(huì)強(qiáng)制轉(zhuǎn)換成布爾值,任何假值都不會(huì)被返回驻仅,當(dāng)使用0、‘’登渣、NaN作為有效值時(shí)噪服,就會(huì)被||
強(qiáng)制轉(zhuǎn)成假值,從而返回右側(cè)值胜茧;而??``就能解決這問(wèn)題粘优,它只會(huì)在左側(cè)值為
null、
undefined時(shí)才返回右側(cè)值呻顽。 **在賦值時(shí)雹顺,可以結(jié)合賦值運(yùn)算符
??=``` **
let a = {b: null, c: 16}
a.b ??= 3 // 相當(dāng)于 a.b ?? a.b=3
a.c ??= 3 // 相當(dāng)于 a.c ?? a.c=3
console.log(a) // 輸出 { b: 3, c: 16 }
3.可選鏈操作符
?.
運(yùn)算符功能類似于 .
運(yùn)算符,不同之處在于如果鏈條上的一個(gè)引用是nullish(null或undefined)廊遍,.
操作符會(huì)引起一個(gè)錯(cuò)誤嬉愧,?.
操作符取而代之的是會(huì)按照短路計(jì)算的方式返回一個(gè)undefined
。當(dāng)?.
操作符用于函數(shù)調(diào)用時(shí)喉前,如果該函數(shù)不存在也將會(huì)返回 undefined
没酣。
const obj = {
a: 'foo',
b: {
c: 'bar'
}
}
console.log(obj.b?.c) // 輸出 bar
console.log(obj.d?.c) // 輸出 undefined
console.log(obj.func?.()) // 不報(bào)錯(cuò),輸出 undefined
可選鏈操作符:http://www.reibang.com/p/29df44647c1e
4.私有方法/屬性
在一個(gè)類里面可以給屬性前面增加 # 私有標(biāo)記的方式來(lái)標(biāo)記為私有卵迂,除了屬性可以被標(biāo)記為私有外裕便,getter/setter 也可以標(biāo)記為私有,方法也可以標(biāo)為私有见咒。
class Person {
getDesc(){
return `${this.#name} ${this.#getAge()}`
}
#getAge() { return this.#age } // 私有方法
get #name() { return 'Leo' } // 私有訪問(wèn)器
#age = 28// 私有屬性
}
const man = new Person()
console.log(man.age) // undefined 直接訪問(wèn)不到
console.log(man.getDesc()) // Leo 28
5.雙位運(yùn)算符
對(duì)正數(shù)來(lái)說(shuō) ~~
運(yùn)算結(jié)果與 Math.floor( )
運(yùn)算結(jié)果相同偿衰,而對(duì)于負(fù)數(shù)來(lái)說(shuō)與 Math.ceil( )
的運(yùn)算結(jié)果相同
~~3.5 // 3
Math.floor(3.5) // 3
Math.ceil(3.5) // 4
~~-4.5 // -4
Math.floor(-4.5) // -5
Math.ceil(-4.5) // -4
6.復(fù)制到剪貼板
navigator.clipboard.writeText('復(fù)制的內(nèi)容')