ECMAscript2021 新特性
-
String.prototype.replaceAll
在JavaScript中, ]replace() 方法仅替换字符串中一个模式的第一个实例,如果我们需要替换所有就要 使用全局正则表达式
提案方法 replaceAll() 返回一个新字符串,其中模式的所有匹配都会被替代项替换。模式可以是字符串或正则表达式,而替换项可以是字符串或针对每次匹配执行的函数。
let str = 'I use linux, I love linux' str = str.replaceAll('linux', 'windows'); console.log(str) /**** Output ****/ // I use windows, I love windows
-
Promise.any
Promise.any 接受一系列Promise并在任何提供 Promise 解决后立即解决。如果这个方法命中了 Promise 列表 / 数组中的第一个已解析的 Promise,就会短路并返回一个值。
Promise.any([ new Promise((resolve, reject) => setTimeout(reject, 200, 'Third')), new Promise((resolve, reject) => setTimeout(resolve, 1000, 'Second')), new Promise((resolve, reject) => setTimeout(resolve, 2000, 'First')), ]) .then(value => console.log(`Result: ${value}`)) .catch (err => console.log(err)) /**** Output ****/ // Result: Second
Promise.any([ new Promise((resolve, reject) => setTimeout(reject, 200, 'Third')), new Promise((resolve, reject) => setTimeout(resolve, 3000, 'Second')), new Promise((resolve, reject) => setTimeout(resolve, 2000, 'First')), ]) .then(value => console.log(`Result: ${value}`)) .catch (err => console.log(err)) /**** Output ****/ // Result: First
如果所有的 promise 都被拒绝,那么它将抛出一个汇总错误消息。
Promise.any([ new Promise((resolve, reject) => setTimeout(reject, 200, 'Third')), new Promise((resolve, reject) => setTimeout(reject, 1000, 'Second')), new Promise((resolve, reject) => setTimeout(reject, 2000, 'First')), ]) .then(value => console.log(`Result: ${value}`)) .catch (err => console.log(err)) /**** Output ****/ // AggregateError: All promises were rejected
它与 Promise.race() 不同,因为一旦给定的 Promise 之一被解析或拒绝,Promise.any() 方法就会短路。
-
逻辑运算符和赋值表达式
逻辑赋值运算符将逻辑运算(例如??,&&或||)与赋值(例如=)结合在一起
- a | |= b
如果 a 为真则返回 a,如果 a 为假则返回 b
//old
if (!a) {
a = b
}
// or
a = a || b
// new
a ||= b
- a &&= b
如果 a 为真,则返回 b , 如果 a 为假,则返回 a
//old
if (!a) {
a = b
}
// or
a = a && b
// new
a &&= b
- a ??= b
如果 a 为 null 或未定义,则返回 b;如果a为真,则返回a。
//old
a = a ?? b
// new
a ??= b
-
数值分隔符
新引入的数值分隔符使用 _(下划线)字符,在数值组之间提供分隔,使数值读起来更容易
let number = 100_000
console.log(number)
/**** Output ****/
// 100000