ES2020的js新特性

2022-02-03 09:02:24 字數 3658 閱讀 1259

1. 可選鏈

可選鏈,?.操作符,在訪問屬性或方法時,若存在為空的中間量,則返回undefined,在長鏈條的屬性訪問時,可節省**

const stu =

}const cityname = stu.address?.city?.name

//cityname: undefined

const res = stu.somemethod?.()

//res: undefined

在可選鏈不能用的情況下,可以用lodash的get方法代替:

_.get(stu, 'adderss.city.name', 'default name');

2. 空值合併運算子

空值合併,??操作符,可以避開null和undefined,得到乙個預設值。相比於a || b這種操作,對0、nan等值不會轉化為false,只處理null和undefined,規避了一些有效值

const foo = null ?? 'default'

//foo: 'default'

const baz = 0 ?? 12

//baz: 0

3. 管道運算子

|>操作符,類似於linux的管道,可以序列的執行函式

const double = (n) => n * 2;

const increment = (n) => n + 1;

double(increment(double(double(5)))); //

42//

使用管道操作符

5 |> double |> double |> increment |> double; //

42

4. 私有變數

在變數前加#,可以定義私有變數,僅能在類內部使用

class message 

}const greeting = new

message()

greeting.greet()

//howdy

console.log(greeting.#message) //

private field '#message' must be declared in an enclosing class

5. promise.allsettled

promise.all的缺陷是,有乙個任務reject,所有的任務都掛掉,這通常不是我們想要的結果。

promise.allsettled,就是為了解決這個問題。它執行完後,返回所有的執行結果,無論是resolve還是reject,在放在乙個陣列裡返回

promise.allsettled([

promise.reject(),

promise.resolve(),

promise.resolve()

]).then((ret) =>}

1: }

2: }

*///

過濾掉 rejected 狀態,盡可能多的保證頁面區域資料渲染

rendercontent(ret.filter((el) =>));

6. 動態匯入(dynamic import)

動態的import乙個模組,返回乙個promise,可以在module載入完成後做一些事情,或者捕獲錯誤

el.onclick = () =>)

.catch((err) =>)

}

7. top-level await

通常await只能在async函式中使用,新提案中,允許在頂層呼叫await,簡化模組載入呼叫,可以和dynamic import配合使用

const strings = await import(`/i18n/$`);

let jquery;

try

catch

8. bigint

es2020提供一種新的資料型別:bigint。使用 bigint 有兩種方式:

//

在整數字面量後面加n。

var bigintnum =9007199254740993n;

//使用 bigint 函式。

var bigintnum = bigint(9007199254740);

var anotherbigintnum = bigint('9007199254740993');

//通過 bigint, 我們可以安全的進行大數整型計算

var bignumret = 9007199254740993n+ 9007199254740993n; //

-> -> 18014398509481986n

bignumret.tostring(); //

-> '18014398509481986'

bigint 是一種新的資料原始(primitive)型別。

typeof9007199254740993n; //

-> 'bigint'

9. string.prototype.matchall

//

有g,匹配到所有項,但是未顯示匹配的group

var str = 'js

正則';

var reg = /<\w+>(.*?)<\/\w+>/g;

console.log(str.match(reg));

//-> ["js", "正則"]

//無g,只匹配到第一項,這回顯示了匹配的group

var str = 'js

正則';

var reg = /<\w+>(.*?)<\/\w+>/;

console.log(str.match(reg));

//上面會列印出/*[

"js",

"js",

index: 0,

input:

"js正則",

groups: undefined

]*/

matchall解決的就是,既能匹配出所有項,也能得到每項的詳細資訊,例如group的匹配, matchall, 會返回乙個迭代器

var str = 'js

正則';

var allmatchs = str.matchall(/<\w+>(.*?)<\/\w+>/g);

for(const match of allmatchs)

/*第一次迭代返回:

[ "js",

"js",

index: 0,

input: "js

正則",

groups: undefined

]第二次迭代返回:

[ "正則",

"正則",

index: 15,

input: "js

正則",

groups: undefined

]*/

會得到匹配到的所有項,及其詳細資訊。

ES2020的這些新功能令人期待

const user if user user.address if user user.address user.address.prop1 user.address.prop1.prop2 user.address.prop1.prop2.prop3 user.address.prop1.pro...

修煉js 6 es6新特性

es6能夠讓我們按照一定的模式,從陣列或物件中提取值並賦值其他變數,這被稱之為結構賦值,接下來讓我們看看乙個簡單的例子。var a,b,c 1,2,3 console.log a 1這段 將右邊的陣列的值分別賦值給a,b,c三個變數,這只是最簡單的應用,它可以更複雜,例如 var a,b c 1 2...

es6新特性 ES6新特性(一)

var 1 var宣告的是函式作用域 區域性 但在if for等定義的變數是全域性的 2 var 具有變數提公升,預解析 3 在同乙個作用域下,var可以宣告多次 4 var 宣告的變數會掛載到window上 let1 let不存在變數提公升,在變數使用之前,必須要先宣告 2 let在同一作用域下,...