跳到主要内容

导入断言

· 阅读需 3 分钟
Dan Clark ([@dandclark1](https://twitter.com/dandclark1)),断言导入的坚定支持者

新的导入断言功能允许模块导入语句在模块规范符旁边包含额外的信息。该功能的初始用途是使 JSON 文档可以作为 JSON 模块 导入:

私有品牌检查,也就是 `#foo in obj`

· 阅读需 3 分钟
Marja Hölttä ([@marjakh](https://twitter.com/marjakh))

in 操作符 可以用来测试给定对象(或它的原型链上的任意对象)中是否有给定的属性:

const o1 = {'foo': 0};
console.log('foo' in o1); // true
const o2 = {};
console.log('foo' in o2); // false
const o3 = Object.create(o1);
console.log('foo' in o3); // true

私有品牌检查功能扩展了 in 操作符,支持 私有类字段

class A {
  static test(obj) {
    console.log(#foo in obj);
  }
  #foo = 0;
}

A.test(new A()); // true
A.test({}); // false

class B {
 #foo = 0;
}

A.test(new B()); // false; 它不是同一个 #foo

由于私有名称仅在定义它们的类内部可用,所以测试也必须发生在类内部,例如在上面 static test 方法中。

子类实例接收来自父类的私有字段作为自己的属性:

class SubA extends A {};
A.test(new SubA()); // true

但是通过 Object.create 创建的对象(或者通过 __proto__ 设置器或 Object.setPrototypeOf 后来设置了原型的对象)没有作为自己的属性接收到私有字段。因为私有字段查找仅适用于自己的属性,所以 in 操作符找不到这些继承的字段:

类的静态初始化块

· 阅读需 2 分钟
郭舒语 ([@_shu](https://twitter.com/_shu))

新的类静态初始化块语法允许开发者将针对某个类定义只运行一次的代码集中到一个地方。考虑下面的示例,其中一个伪随机数生成器使用静态块在 class MyPRNG 定义被评估时初始化一个熵池。

`Intl.DisplayNames`

· 阅读需 4 分钟
Shu-yu Guo ([@_shu](https://twitter.com/_shu)) 和 Frank Yung-Fong Tang

面向全球用户的 Web 应用需要以许多不同语言显示语言、地区、书写系统和货币的名称。这些名称的翻译需要数据,该数据可在 Unicode CLDR 中找到。将数据打包为应用的一部分会耗费开发时间。用户往往更喜欢语言和地区名称的统一翻译,而随着全球地缘政治情况的变化保持数据更新需要持续维护。

快速并行应用与WebAssembly SIMD

· 阅读需 10 分钟
Deepti Gandluri([@dptig](https://twitter.com/dptig)), Thomas Lively([@tlively52](https://twitter.com/tlively52)), Ingvar Stepanyan([@RReverser](https://twitter.com/RReverser))

SIMD代表 单指令,多数据。SIMD指令是一类特殊的指令,通过在多个数据元素上同时执行相同的操作来利用应用程序中的数据并行性。计算密集型应用程序如音频/视频编解码器、图像处理器,都是利用SIMD指令加速性能的例子。大多数现代架构都支持某些变体的SIMD指令。

正则表达式匹配索引

· 阅读需 5 分钟
Maya Armyanova ([@Zmayski](https://twitter.com/Zmayski)),经常表达新特性

JavaScript现在具备一个新的正则表达式增强功能,称为“匹配索引”。假设您希望找到JavaScript代码中与保留词重合的无效变量名,并在变量名下输出一个插入号和一个“下划线”,例如:

String.prototype.replaceAll

· 阅读需 4 分钟
Mathias Bynens ([@mathias](https://twitter.com/mathias))

如果你曾经处理过 JavaScript 中的字符串,很可能遇到过 String#replace 方法。String.prototype.replace(searchValue, replacement) 根据你指定的参数返回一个替换了一些匹配项的字符串: