ECMAScript2021 可用新特性
String.prototype.replaceAll
String.prototype.replaceAll(searchValue, replaceValue)
看到名字是不是第一时间反应 replace
加个g不就完事了哦,那如果遇到需要转义的正则,例如 + .
这些,
或许你还会这种方案
const str = 'qqqq+qqqq+qqqq';
str.split('+').join(' ');
如上所述的确可行,也就耗点性能而已嘛~ 由于经常有这种操作,也就催生了 replaceAll
方法,更加快捷的操作字符串
const str = 'qqqq+qqqq+qqqq';
str.replaceAll('+', ' ');
还是香的啊。
Promise.any
最近两个版本都有对 Promise 的Api扩充,例如 2020 的 allSettled,回顾下
const p = Promise.all([p1, p2, p3]);
Promise.all
(Es 2015) 只有当传入的每个 Promise 实例都返回fullField
时,p
才会fullField
,只要
有一个rejected
, p 的状态就会变成rejected
Promise.race
(Es 2015) 当传入的 Promise 实例中 有一个率先改变状态,那么P的状态就跟着改变,也就是说返回最先改变的
Promise 状态(区分fullField
rejected
)Promise.allSettled
(Es 2020) 只有等传入的所有 Promise 实例都返回结果,不区分fullField
rejected
包装实例才会有结束Promise.any
(Es 2021) 当传入的 Promise 有任何一个完成的 就返回那个已经有返回值的 Promise,如果所有的 Promise 都rejected
则返回rejected
的 Promise
Promise.any(promises).then(
(first) => {
// 任何一个Promise完成
},
(error) => {
// 所有的 Promise都拒绝了
}
)
举个栗子,可以使用 Promise.any
来检测哪个接口或站点最快
Promise.any([
fetch('https://v8.dev/').then(() => 'home'),
fetch('https://v8.dev/blog').then(() => 'blog'),
fetch('https://v8.dev/docs').then(() => 'docs')
]).then((first) => {
// Any of the promises was fulfilled.
console.log(first);
// → 'home'
}).catch((error) => {
// All of the promises were rejected.
console.log(error);
});
逻辑赋值操作
先回顾下 Es 2020
的空值合并操作符 ??
,当左侧操作数为 undefinde
或者 null
时,该操作会将右侧操作数值赋给左侧变量
const val = false ?? null;
const val1 = '' ?? null;
const val2 = 0 ?? null;
const val3 = undefined ?? 0;
const val4 = null ?? 0;
console.log(val, 'val'); // false
console.log(val1, 'val1'); // ''
console.log(val2, 'val2'); // 0
console.log(val3, 'val3'); // 0
console.log(val4, 'val4'); // 0
再看看逻辑赋值运算符
let logic = 0;
logic ||= 1;
console.log(logic, 'logic'); // 1
let logic1 = 0;
logic1 &&= 1;
console.log(logic1, 'logic'); // 0
let logic2 = 0;
logic2 ??= 1;
console.log(logic2, 'logic2'); // 0
let logic3 = null;
logic3 ??= 1;
console.log(logic3, 'logic3'); // 1
https://blog.csdn.net/weixin_37352936/article/details/110138808