ES12(ES2021)JavaScript 的一些新特性。
ES2021 版本中发布的变更
如下。
String.prototype.replaceAll()
-
对所有适用部件进行字符串更换
-
现有的 replace() 方法仅对要替换的第一部分有效,因此如果要替换所有内容,则必须使用正则表达式。
-
通过这种方法,您可以防止因正则表达式错误而导致的替换遗漏,并且可以一目了然地了解您想要做什么。
let str = "I like programming. I like my job."
str.replaceAll ( "like" , "love" )
// Output result: "I love programming. I love my job."
TypeScript 默认尚不支持此功能,但您可以通过修改 tsconfig.json 文件中的设置来使用它,如下所示。(ES2021 的其他更改也将陆续推出)
{ "compilerOptions" : { "lib" : [ "ES2021" ], }, }
Promise.any()
-
当同时运行的多个 Promise 中的任何一个被处理并解决时,该 Promise 将被返回。
-
如果所有承诺都被拒绝,则返回 AggregateError(当一个操作需要返回多个错误时的类型)。
-
如果你想知道某个过程是否成功,但不需要知道是哪个过程,那么使用任意一个过程似乎都很有用。
-
TypeScript 默认还不支持此功能。可以通过修改 tsconfig.json 文件中的设置(如上所述)来启用此功能。
Promise .any ([ new Promise ( ( resolve, reject ) =>
setTimeout (reject, 100 , '1st' )),
new Promise (( resolve, reject ) => setTimeout (resolve, 200, '2nd')) ])
.then ( value => console .log ( `first completed process: $ {value} `))
.catch (err => console .log (err))
// Output result
// First completed process: 2nd
WeakRefs
使得以下操作成为可能:
-
创建对对象的“弱引用”;
在对象被垃圾回收后执行用户定义的终结器。 -
“弱引用”是指对对象的引用,它不会干扰垃圾回收的执行。
通常情况下,当一个对象被创建时,它会被保存在内存中(“强引用”),但“弱引用”会在需要释放内存时受到垃圾回收机制的回收。
-
如果能正确使用这两个方法,就可以防止不再引用的数据(例如已删除的对象)发生内存泄漏。
-
然而,垃圾回收机制非常复杂(垃圾回收何时以及如何发生取决于你使用的 JavaScript 引擎的具体实现),因此在使用时应仔细考虑。官方建议,如果可能的话,最好避免使用垃圾回收。
-
虽然官方 TypeScript 文档中没有提及,但根据这个问题,它在 4.1 及更高版本中可用。
-
我尝试在 PlayGround 中执行以下代码,但它肯定能够用 4.1 或更高版本编译。
const obj = new Map ();
const cache = new WeakRef (obj);
// Output result
// v4.0.5
// Cannot find name'WeakRef'.
// v4.1.5
// None
逻辑赋值运算符
您可以按如下方式编写
-
输入初始值时无需额外的分支,并且实现方式是刷新式的。
-
从 TypeScript 4.0 版本开始可用
// a || (a = b);
a || = b;
// a && (a = b);
a && = b;
// a ?? (a = b);
a ?? = b;
数字分隔符
- _可以插入在数字之间。(即使您输入的是数字,系统也会将其识别为数值)
- 这不仅适用于十进制数,也适用于所有数值型数字。这使得数字更易于阅读。
- 从 TypeScript 2.7 版本开始可用。
1_000_000_000 // 1.0101_475_938.38 //
1.01 million, decimal point can also be used