ES12新特性了解下?
新增特性:
- String.prototype.replaceAll
- Promise.any
- WeakRefs
- 逻辑运算符和赋值表达式
- 数字分隔符号
1.replaceAll
replaceAll返回一个全新的字符串,所有符合匹配规则的字符都将被替换掉,替换规则可以是字符串或者正则表达式
1 | let string = 'I love 前端,I love 前端路漫漫' |
需要注意的是,replaceAll
在使用正则表达式的时候,如果非全局匹配(/g
),则replaceAll()
会抛出一个异常
2.Promise.any
当Promise列表中的任意一个promise成功resolve则返回第一个resolve的结果状态 如果所有的promise均reject,则抛出异常表示所有请求失败
1 | Promise.any([ |
再来看下另一种情况
1 | Promise.any([ |
Promise.any与Promise.race十分容易混淆,务必注意区分,Promise.race 一旦某个promise触发了resolve或者reject,就直接返回了该状态结果,并不在乎其成功或者失败
3.WeakRefs
使用WeakRefs的Class类创建对对象的弱引用(对对象的弱引用是指当该对象应该被GC回收时不会阻止GC的回收行为)
注意:要尽量避免使用WeakRef
和FinalizationRegistry
,垃圾回收机制依赖于JavaScript
引擎的实现,不同的引擎或是不同版本的引擎可能会有所不同。
这个提案主要包括两个主要的新功能:
- 使用 WeakRef 类创建对象的弱引用
- 使用 FinalizationRegistry 类对对象进行垃圾回收后,运行用户定义的终结器
它们可以分开使用也可以一起使用。
WeakRef
实例不会阻止 GC
回收,但是 GC
会在两次 EventLoop
之间回收 WeakRef
实例。GC
回收后的 WeakRef
实例的 deref()
方法将会返回undefined
。
1 | let ref = new WeakRef(obj) |
FinalizationRegistry 注册 Callback,某个对象被 GC 回收后调用。
1 | const registry = new FinalizationRegistry(heldValue => { |
4.逻辑运算符和赋值表达式
逻辑运算符和赋值表达式,新特性结合了逻辑运算符(&&,||,??)和赋值表达式而JavaScript已存在的 复合赋值运算符有:
- 操作运算符:+= -= *= /= %= **=
- 位操作运算符:&= ^= |=
- 按位运算符:<<= >>= >>>=
回顾下 ES2020
新增的空值合并操作符 ??
在当左侧操作数为 undefined
或 null
时,该操作符会将右侧操作数赋值给左侧变量。
1 | const name = null ?? '前端路漫漫' |
逻辑赋值运算符写法:
1 | a ||= b; // 等同于 a || (a = b); |
5.数字分隔符
数字分隔符,可以在数字之间创建可视化分隔符,通过_下划线来分割数字,使数字更具可读性
1 | const money = 1_000_000_000 |
该新特性同样支持在八进制数中使用
1 | const number = 0o123_456 |
- 本文链接:https://cong1223.github.io/2021/02/21/ES12%E4%BD%A0%E9%9C%80%E8%A6%81%E7%9F%A5%E9%81%93%E7%9A%84%E6%96%B0%E7%89%B9%E6%80%A7/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。
若没有本文 Issue,您可以使用 Comment 模版新建。
GitHub IssuesGitHub Discussions