跳到主要内容

4 篇博文 含有标签「Node.js 14」

查看所有标签

`Intl.DisplayNames`

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

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

顶层 `await`

· 阅读需 5 分钟
Myles Borins ([@MylesBorins](https://twitter.com/MylesBorins))

顶层 await 使开发者能够在异步函数之外使用 await 关键字。它像一个大的异步函数,使其他 import 它的模块在开始执行其主体之前会等待。

弱引用和终结器

· 阅读需 10 分钟
Sathya Gunasekaran ([@_gsathya](https://twitter.com/_gsathya)), Mathias Bynens ([@mathias](https://twitter.com/mathias)), Shu-yu Guo ([@_shu](https://twitter.com/_shu)), and Leszek Swirski ([@leszekswirski](https://twitter.com/leszekswirski))

一般来说,JavaScript 中对象的引用是_强引用_,这意味着只要你有对对象的引用,它就不会被垃圾回收。

const ref = { x: 42, y: 51 };
// 只要你可以访问到 `ref`(或其他对同一对象的引用),这个对象就不会被垃圾回收。

目前,WeakMapWeakSet 是在 JavaScript 中以某种方式弱引用对象的唯一方式:将一个对象作为键添加到 WeakMapWeakSet 中不会阻止它被垃圾回收。

const wm = new WeakMap();
{
const ref = {};
const metaData = 'foo';
wm.set(ref, metaData);
wm.get(ref);
// → metaData
}
// 我们在这个代码块作用域中不再拥有对 `ref` 的引用,因此它现在可以被垃圾回收,尽管它是 `wm` 中的一个键,而我们仍然可以访问到 `wm`。

公共和私有类字段

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

多个提案扩展了现有的JavaScript类语法,新增了功能。本文解释了V8 v7.2和Chrome 72中的公共类字段的新语法,以及即将到来的私有类字段语法。

以下是一个创建名为IncreasingCounter的类实例的代码示例:

const counter = new IncreasingCounter();
counter.value;
// 输出 '获取当前值!'
// → 0
counter.increment();
counter.value;
// 输出 '获取当前值!'
// → 1

注意,访问value会执行一些代码(例如打印一条消息)然后返回结果。现在请思考,如何在JavaScript中实现这个类呢?🤔

ES2015类语法

以下是使用ES2015类语法实现IncreasingCounter的方法:

class IncreasingCounter {
constructor() {
this._count = 0;
}
get value() {
console.log('获取当前值!');
return this._count;
}
increment() {
this._count++;
}
}

该类在原型上安装了value的getter和一个increment方法。更有趣的是,类具有一个构造函数,该构造函数创建了一个实例属性_count并将其默认值设置为0。目前我们倾向于使用下划线前缀来表示_count不应该被类的使用者直接使用,但这只是一种约定,并不是一种真正的由语言强制执行的“私有”属性。