0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

盘点总结ECMAScript新版本的四大功能的神秘之处

如意 来源:读芯术微信公众号 作者:读芯术微信公众号 2020-10-10 09:53 次阅读

2020年可能已经位列史上最糟糕年份TOP5了。那么不妨忘记今年,期待一下2021会有什么惊喜吧!没错,明年我们将迎来新版ECMAScript(也就是常说的JavaScript)。本文中,笔者将快速带你先来了解一下其为何物。

replaceAll字符串的方法

这一方法早就有了,现有的 replace方法早就应该有所成效。也许你不知道,目前来自String对象的 replace方法只会影响所找到的第一个匹配,当然,除非你使用正则表达式而不是简单的字符串作为第一个参数

这并非是很大的进步,更多的是一种补充,但还是值得赞赏。

盘点总结ECMAScript新版本的四大功能的神秘之处

方法和访问器的私密化修改器

目前还没听说私密化有何进展(该提案还停留在第三阶段),但是作为未来的一个尝试,我们将能够对方法和访问器设置可见性。这里的“可见性”是指将它们设置为私人化,意味着我们终于有了保护代码的基本方式,并开始慢慢地走向更面向OOP的编码方式(并不是说我们现在的函数式方法有什么问题)。

盘点总结ECMAScript新版本的四大功能的神秘之处

实质上,你正在用#字符来使方法或访问器私密化。这个字符也会成为该名称的一部分,所以如果你想使用上面所提到的方法,可以简单地用 this.#Age 或者 this.#myPrivateMethod()。

在这两种情况下,如果你试图从一类之外甚至从扩展了的类里面使用它们,都会出现异常(要等到有了保护方法之后再使用)。

终结器和弱引用‍

这两个有趣的工具可以帮助处理内存使用问题,并管理垃圾收集。不过,除非你需要特别注意内存的使用,不然不太需要用到这两个工具。

注意,下面的两个功能涉及垃圾收集器的工作方式,但安装启用只针对一个运行时。这意味着编写依赖于非标准安装的业务逻辑很可能会产生意想不到的结果。即使有了这些工具,也要在使用前要清楚自己的目的。

(1) 弱引用

在介绍弱引用之前,我先快速介绍一下强引用,以便你理解弱引用的优势。强引用本质上是一个指向目标的指针,在JavaScript中,这只是一个变量,你已经将目标分配到这个变量中。比如说:

盘点总结ECMAScript新版本的四大功能的神秘之处

上文中,myP是一个有效的强引用,直到它不复存在。一旦对一个对象的所有强引用被消除,那么垃圾收集器就可以自由地销毁这个对象,并释放它的内存以便用于其他事情。也就是说,有些情况下,比如下面这种,强引用可能会锁定一个目标,以至于永远无法释放。

盘点总结ECMAScript新版本的四大功能的神秘之处

在上面的例子中,两个对象都是相互引用的,所以即使me和sibling变量都不在范围内,因此,去掉引用,在内部每个对象都对另一个对象有一个强引用。在实践中,这意味着这些对象永远不会被收集。这么做完全没有问题,除非你是在一个内存非常小的设备中使用JS。

(2) 输入弱参考

对强引用有所了解之后,弱引用就很好理解啦。弱引用本质上是一种保留对象引用而不影响垃圾收集器行为的方法。在前面的例子中,如果sibling性能会使用弱引用构造来设置,那么就可以收集这些对象。弱引用的另一个用例是缓存结构,因为人们不希望缓存的对象内部引用过于活跃。

盘点总结ECMAScript新版本的四大功能的神秘之处

上面的例子非常基础,使用弱引用就是这么简单。只要记住,如果你想访问被引用的对象,要用deref方法。因为这是一个弱引用,就需要检查deref的返回值,如果它是未定义的,就说明这个对象不再存在,否则可以安全地使用它(因此在 get 方法中进行IF检查)。

(3) 终结器

现在,在顶部的 cherrie 中,终结器允许你对弱引用对象收集垃圾的事实做出反应。同样,这也是高度具体化的实现,以下是使用方法:

盘点总结ECMAScript新版本的四大功能的神秘之处

本质上,这里用了FinalizationRegistry 来创建注册表,需要用回调函数作为参数。在每次收集一个对象(之前用register 方法注册的)时都会用到这个函数。

register 方法本身是用来指定所等待的对象的重构方法,它的第二个参数是在创建注册表时传递给初始定义的回调的值。建议你少用这个方法,特别是不要想着用它来做业务,但是可以考虑在特殊情况下用它来解决一些新奇的问题。

Promise.any

在这个版本中,ECMAScript中增加了一个同时处理多个承诺的方法。any方法可以运行多个承诺,并用第一个解决的承诺来解决后面的问题,或者等到所有的承诺都失败并返回到一个AggregateError对象处(它是Error对象的一个子类)。

那么,any和race之间有什么区别呢?事实上,race只要有一个承诺会实现或失败,它就会进行结算并返值。然而,any 会用第一个结算值进行结算,或者等待所有的值都失败了,再一起恢复所有错误。

const promise1 =Promise.reject(0); const promise2 =newPromise((resolve) =》setTimeout(resolve, 100, ‘quick’)); const promise3 =newPromise((resolve) =》setTimeout(resolve, 500, ‘slow’)); const promises = [promise1, promise2, promise3]; Promise.race(promises).then((value) =》 console.log(value)); //logs the rejected promise //vs Promise.any(promises).then((value) =》 console.log(value)); //logs “quick”

注意any实际上忽略了第一个被拒绝的承诺,因为还有其他的承诺正在解决,这就是race和any的主要区别。

ECMAScript2021的新特征不多,但已经被接受的功能笔者看来非常好!使用WeakRef和FinalizationRegistry时要小心哦,它们的功能非常有趣,但它们在不同的运行情况下处理的结果或行为可能会不一样。

你最喜欢哪个新功能?对于这个版本,你最期待的又是什么呢?
责编AJX

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 字符串
    +关注

    关注

    1

    文章

    578

    浏览量

    20493
  • javascript
    +关注

    关注

    0

    文章

    516

    浏览量

    53807
  • ECMA
    +关注

    关注

    0

    文章

    3

    浏览量

    3822
收藏 人收藏

    评论

    相关推荐

    LABview最新版本

    请问LABview的最新版本是什么?
    发表于 11-07 15:42

    如何使用更新版本的MbedTLS?

    。ST在CubeMX中更新版本需要多长时间?我将如何使用更新版本的 MbedTLS?似乎我有两个选择。一种是使用 ST 版本构建项目,然后使用新版本的 MbedTLS 手动更新文件 -
    发表于 12-15 09:06

    FilterPro v3.0设计工具的最新版本

    FilterPro v3.0设计工具的最新版本 TI推出其普及型 FilterProTM 设计工具的最新版本。该 FilterPro v3.0 更新了各种功能,如调节无源元件容差、查看
    发表于 05-17 13:36 8171次阅读

    MathWorks推出 MATLAB 的重要新版本

     中国北京 – 2014 年10月9日 – MathWorks今日宣布,推出MATLAB的重要新版本。作为2014b版本的一部分,重大的更新功能包括了全新的图形系统、大数据功能以及经过
    发表于 10-09 15:44 4516次阅读

    新版本IAR工具下载

    新版本IAR工具下载
    发表于 11-23 17:35 0次下载

    新版本IAR破解视频教程

    新版本IAR破解视频教程
    发表于 12-17 11:06 0次下载

    应用每隔一段时间都会发布一个新版本,小米5C应用自动升级教程

    应用每隔一段时间都会发布一个新版本新版本会修复旧版本上发现的问题,以及加入一些新的功能,那什么如何才能一直保持应用都是最新版本呢?那就是开
    发表于 04-17 14:30 2727次阅读

    新版本数据平面开发套件(DPDK)的功能介绍

    了解最新版本的DPDK。每个版本附带的功能清单都是升级的,我们将描述每个版本如何影响在其应用程序中使用它的NFV用户。
    的头像 发表于 11-05 06:49 6688次阅读

    360极速浏览器新版本四大亮点

    今天360极速浏览器发布新版本版本号为12.0,新版具备“四大亮点”:Chromium78全新内核、DNS加密防劫持、暗夜炫黑模式、4K高清视频播放,号称全方位实现畅快浏览体验。
    的头像 发表于 11-26 14:39 3636次阅读

    Keil MDK和IAR EWARM新版本问题方案

    Keil MDK和IAR EWARM新版本,及不同版本兼容性问题
    的头像 发表于 01-10 14:47 4854次阅读

    开源3D图形工具新版本:引入大量新功能和改进

    虽然失败了,但没准第次就会成功,主要是鼓励别放弃)。 最新版本进一步改善了用户体验,提供了一系列新的功能,包括全新的 Booleans,为布雕和大量物体修改引入碰撞支持,并承诺改进诸多动画工具。 雕刻在此
    的头像 发表于 11-27 17:46 1629次阅读

    ASCII对照表最新版本下载

    ASCII对照表最新版本下载
    发表于 08-23 10:53 0次下载

    谷歌发布Chrome新版本

    近日,谷歌正式发布Chrome 100,该浏览器今天刚刚发布了版本号为 100 的最新版本,目前,Mac、Windows、安卓和iOS平台都已经开始同步推送更新,新版本将会继续减少内存、CPU占用率等情况。
    的头像 发表于 03-30 16:54 2378次阅读

    Motor-CAD最新版本的NVH功能介绍

    Motor-CAD最新版本的电机NVH快速分析功能,可用于电机概念设计阶段快速对比不同设计方案的NVH水平,在设计初期定位潜在的共振频率段,指导电机NVH优化设计的方向。在本次电机仿真进阶研修班中,将对Motor-CAD最新版本
    的头像 发表于 12-12 10:35 3598次阅读

    CANoe新版本18正式发布

    新版本持续为电动智能软件开发测试带来系列化的新功能新版本CANoe产品体系包括具有GUI交互的桌面版本、可部署在服务器后云端的服务器版本
    的头像 发表于 05-09 08:25 3259次阅读
    CANoe<b class='flag-5'>新版本</b>18正式发布