ES2020新特性記錄
阿新 • • 發佈:2020-10-10
1.可選鏈操作符
// old
let ret = obj && obj.first && obj.first.second
// new
let ret = obj?.first?.second
2.空位合併操作符
// old
let c = a ? a : b
let c = a || b
// new 如果表示式在??的左側運算子求值為undefined 或 null,就返回其右側預設值。 (0, false 標示有效值)
let c = a ?? b
3.Promise.allSettled
Promise.all 具有併發執行非同步任務的能力。但它的最大問題就是如果引數中的任何一個promise為reject的話,則整個Promise.all 呼叫會立即終止,並返回一個reject的新的 Promise 物件。 Promise.allSettled跟Promise.all類似, 其引數接受一個Promise的陣列, 返回一個新的Promise, 唯一的不同在於, 它不會進行短路4.String.prototype.matchAll
old
function collectGroup1 (regExp, str) { const matches = [] while (true) { const match = regExp.exec(str) if (match === null) break matches.push(match[1]) } return matches } console.log(collectGroup1(/"([^"]*)"/g, `"foo" and "bar" and "baz"`)) // [ 'foo', 'bar', 'baz' ]
new
function collectGroup1 (regExp, str) { let results = [] for (const match of str.matchAll(regExp)) { results.push(match[1]) } return results } console.log(collectGroup1(/"([^"]*)"/g, `"foo" and "bar" and "baz"`)) // ["foo", "bar", "baz"]
5.Dynamic import
el.onclick = () => { import('/modules/my-module.js') .then(module => { // Do something with the module. }) .catch(err => { // load error; }) } let module = await import('/modules/my-module.js');
6.BigInt
建立 BigInt 型別的值也非常簡單,只需要在數字後面加上 n 即可
const aNumber = 111; const aBigInt = BigInt(aNumber); aBigInt === 111n // true typeof aBigInt === 'bigint' // true typeof 111 // "number" typeof 111n // "bigint" 在大多數操作中,不能將 BigInt與Number混合使用。比較Number和 BigInt是可以的,但是不能把它們相加。 1n < 2 // true 1n + 2 // Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions
7.globalThis
// ES10之前的解決方案 const getGlobal = function(){ if(typeof self !== 'undefined') return self if(typeof window !== 'undefined') return window if(typeof global !== 'undefined') return global throw new Error('unable to locate global object') } // ES10內建 globalThis.Array(0,1,2) // [0,1,2] // 定義一個全域性物件v = { value:true } ,ES10用如下方式定義 globalThis.v = { value:true } globalThis 目的就是提供一種標準化方式訪問全域性物件