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在同一作用域下,...