• ECMAScript 2021 正式确认


    ECMAScript 2021 主要包含内容:

    ECMAScript 2021 于2021年6月22日获得 ECMA International 的批准。ECMAScript 是标准化的 JavaScript 语言,于 1997 年发布了第一版,现已发展成为世界上使用最广泛的通用编程语言之一。

    本 Ecma 标准定义了 ECMAScript 2021 Language,是 ECMAScript 语言规范的第 12 版。

    String.prototype.replaceAll

    此前,如果想要替换所有的 string occurrences,则需要使用 String.prototype.replace 和全局 regexp 的组合。现在,String.prototype.replaceAll简化了这一点。

    const str = "hello-world";
    
    // before
    str.replace(/-/g, "_")
    // "hello_world"
    
    // now
    str.replaceAll("-", "_")
    // "hello_world"
    

    查看更多

    Promise.any

    将 Promise.any 加入了 2021 年规范中的 Promise combinators 列表。当你想处理第一个 fulfills 的 Promise 时,可以使用 Promise.any。与 Promise.race 不同,当其中一个 promises fail 时,它不会 reject。更多详情可查看“Promise combinators explained”。

    // 官方提供例子-检测哪个网站更快
    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);
    });
    

    查看更多

    WeakRefs

    WeakRefs 提案为语言带来了两个新的 contructors:WeakRef 和 FinalizationRegistry。这些新功能是更复杂、更低级的语言概念。

    1、WeakRef

    当将一个对象分配给一个变量时,它指向存储这个对象的值的那块内存(强引用)。如果程序不再引用这个对象,garbage collector 会销毁它并回收内存。WeakRef 的一个实例创建了一个对给定对象的引用,如果该对象仍然在内存中,则返回该对象;如果目标对象已经被垃圾回收,则返回未定义的对象。

    const obj = { spec: "ES2021" };
    const objWeakRef = new WeakRef(obj);
    objWeakRef.deref(); // 如果对象obj被回收则返回undefined,否则就返回obj
    

    2、FinalizationRegistry

    FinalizationRegistry 的实例在注册的目标对象被垃圾收集后触发回调函数。

    const obj = { spec: "ES2021" };
    const registry = new FinalizationRegistry(value => { 
        console.log(`${value}`); // 被回收则执行
    }); 
    registry.register(obj, "ECMAScript 2021"); // 对象obj被回收时会执行此回调函数
    

    值得注意的是,官方提示要尽量避免使用 WeakRef 和 FinalizationRegistry,垃圾回收机制依赖于 JavaScript 引擎的实现,不同的引擎或是不同版本的引擎可能会有所不同。

    查看更多

    Logical Assignment Operators

    顾名思义,逻辑赋值运算符是逻辑运算符(&&, || and ??)和赋值运算符(=)的组合。

    ??(空值合并操作符-ecma2020);示例: let a = null ?? 2; // 2

    a &&= b; //  a = a && b;
    a ||= b; //  a = a || b;
    a ??= b; //  a = a ?? b;
    

    查看更多

    Numeric separators

    数字的可读性随着数字长度的增加而降低。现在,则可以使用下划线(_, U+005F)来分隔数字组,使得长数字更加清晰可读。这个功能在 Java、Python、Perl、Ruby、Rust、Julia、Ada、C# 等其他编程语言中也很有名。

    const population = 37_653_260
    

    查看更多

  • 相关阅读:
    webpack-dev-server 源码
    2021前端会有什么新的变化
    父类 超类 基类 子类 派生类
    Java的权限修饰符(public,private,protected,默认friendly)
    class修饰符public、private、protected、static、abstract
    hash和签名 、证书
    前端加密解密crypto
    appid app_key app_secret
    sdk开发 、sdk与插件的区别
    CF76C
  • 原文地址:https://www.cnblogs.com/guojikun/p/14952823.html
Copyright © 2020-2023  润新知