【7.26】ES2021

173 阅读1分钟

Logical Assignment Operators

let demo1;
demo1 = demo1 || 1;
console.log(demo1);

let demo2;
demo2 ||= 2;
console.log(demo2);

Promise.any

Promise.any 和 Promise.race 和 Promise.all

any 会返回第一个 resolve 的 promise(即使前面有 reject 优先返回),如果都没有 resolve,会返回一个聚合的 Error,用处比如展示第一个可用的图片

race 会返回最快有结果的 promise,不管是 resolve 或者 reject

all 会在所有 promise 都 resolve 时返回,如果有一个 reject 则返回 reject

const promiseReject1 =  new Promise((resolve, reject) => setTimeout(reject, 500, 'promiseReject1'));
const promiseReject2 =  new Promise((resolve, reject) => setTimeout(reject, 1000, 'promiseReject2'));
const promiseReject3 =  new Promise((resolve, reject) => setTimeout(reject, 1500, 'promiseReject3'));

const promiseResolve1 =  new Promise((resolve, reject) => setTimeout(resolve, 500, 'promiseResolve1'));
const promiseResolve2 =  new Promise((resolve, reject) => setTimeout(resolve, 1000, 'promiseResolve2'));
const promiseResolve3 =  new Promise((resolve, reject) => setTimeout(resolve, 1500, 'promiseResolve3'));

Promise.any([
  promiseReject1, promiseResolve1, promiseResolve2
])
.then(value => console.log(`Result Promise.any Resolve: ${value}`))
.catch (err => console.log(err))
// Result Promise.any Resolve: promiseResolve1

Promise.any([
  promiseReject1, promiseReject2, promiseReject3
])
.then(value => console.log(`Result Promise.any Reject: ${value}`))
.catch (err => console.log('Result Promise.any Reject err', err)) // AggregateError 聚合错误
// Result Promise.any Reject err: [object Error]

Promise.race([
  promiseReject3, promiseResolve1, promiseResolve2
])
.then(value => console.log(`Result Promise.race: ${value}`))
.catch (err => console.log(`Result Promise.race err: ${err}`))
// Result Promise.race: promiseResolve1

Promise.all([
  promiseReject1, promiseReject1, promiseResolve2
])
.then(value => console.log(`Result Promise.all: ${value}`))
.catch (err => console.log('Result Promise.all err', err))
// Result Promise.all err" "promiseReject1

String.prototype.replaceAll

const str = 'hello xiaoming, hello world';
console.log(str.replace('hello', 'hi'));
console.log(str.replaceAll('hello', 'hi'));  // 之前用正则实现全局匹配,现在可以直接用 replaceAll
console.log(str.replace(/hello/g, 'hi'));

Numeric Separators

const number = 100_000;
console.log(number);

WeakRef

弱引用,会有引用但会被垃圾回收,因为不同js引擎实现方式会不同,于是不建议使用

FinalizationRegistry

让你的对象在被垃圾回收时请求一个回调,不建议使用

codepen.io/gaodaxin/pe… h3manth.com/ES2021/#wea… www.infoq.cn/article/7z8…