For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
最新举行的一次TC39会议正式确定了ECMAScript 2021的完整功能列表。具体包含以下内容:
String.prototype.replaceAll
此前,如果想要替换所有的string occurrences,则需要使用String.prototype.replace和全局regexp的组合。现在,String.prototype.replaceAll简化了这一点。StackOverflow上的"如何在Javascript中替换字符串的所有出现?"线程的流行证明了这个功能在语言中的必要性。
<strong>const</strong> string = "it-is-just-a-test";
<em>// instead of doing this
</em>string.replace(/-/g, "_")
<em>// "it_is_just_a_test"
</em>
<em>// in ES2021 we can do
</em>string.replaceAll("-", "_")
<em>// "it_is_just_a_test"
</em>
Promise.any
将Promise.any加入了2021年规范中的Promise combinators列表。当你想处理第一个fulfills的Promise时,可以使用Promise.any。与Promise.race不同,当其中一个promises fail时,它不会reject。更多详情可查看“ Promise combinators explained ”。
<strong>const</strong> API = "https://api.github.com/users"
Promise.any([
fetch(`${API}/pawelgrzybek`),
fetch(`${API}/gabriel403`)
])
.then(response => response.json())
.then(({name}) => console.log(`Cool dude is: ${name}`))
.<strong>catch</strong>(error => console.error(error));
WeakRefs
WeakRefs提案为语言带来了两个新的contructors:WeakRef和FinalizationRegistry。这些新功能是更复杂、更低级的语言概念。
WeakRef
当将一个对象分配给一个变量时,它指向存储这个对象的值的那块内存(强引用)。如果程序不再引用这个对象,garbage collector会销毁它并回收内存。WeakRef的一个实例创建了一个对给定对象的引用,如果该对象仍然在内存中,则返回该对象;如果目标对象已经被垃圾回收,则返回未定义的对象。
<strong>const</strong> obj = { spec: "ES2021" };
<strong>const</strong> objWeakRef = <strong>new</strong> WeakRef(obj);
<em>// do something cool
</em>
objWeakRef.deref();
<em>// returns obj in case it is still in memory
</em><em>// returns undefined in case it has been garbage collected
</em>
FinalizationRegistry
FinalizationRegistry的实例在注册的目标对象被垃圾收集后触发回调函数。
<strong>const</strong> obj = { spec: "ES2021" }; <strong>const</strong> registry = <strong>new</strong> FinalizationRegistry(value => { console.log(`The ${value} object has been garbage collected.`) }); registry.register(obj, "ECMAScript 2021"); <em>// perform some action that triggers garbage collector on obj </em><em>// The ECMAScript 2021 object has been garbage collected. </em>
值得注意的是,官方提示要尽量避免使用WeakRef和FinalizationRegistry,垃圾回收机制依赖于JavaScript引擎的实现,不同的引擎或是不同版本的引擎可能会有所不同。
Logical Assignment Operators
顾名思义,逻辑赋值运算符是逻辑运算符(&&, || and ??)和赋值运算符(=)的组合。
<em>// set a to b only when a is truthy
</em>a &&= b;
<em>// set a to b only when a is falsy
</em>a ||= b;
<em>// set a to b only when a is nullish
</em>a ??= b;
Numeric separators
数字的可读性随着数字长度的增加而降低。现在,则可以使用下划线(_, U+005F)来分隔数字组,使得长数字更加清晰可读。这个功能在Java、Python、Perl、Ruby、Rust、Julia、Ada、C#等其他编程语言中也很有名。
<strong>const</strong> population = 37_653_260
详情可查看:#/whats-new-in-ecmascript-2021/
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!