跳至主要内容

4 篇文章 含有標籤「Node.js 14」

檢視所有標籤

`Intl.DisplayNames`

· 閱讀時間約 4 分鐘
Shu-yu Guo ([@_shu](https://twitter.com/_shu)) 和 Frank Yung-Fong Tang

面向全球使用者的網頁應用需要以多種語言展示語言、地區、文字書寫系統和貨幣的名稱。這些名稱的翻譯需要數據,而這些數據可從 Unicode CLDR 獲取。將這些數據作為應用的一部分進行打包會增加開發成本。用戶傾向於一致的語言和地區名稱翻譯,並且隨著世界的地緣政治變化保持數據的最新需要不斷的維護。

頂層`await`

· 閱讀時間約 5 分鐘
Myles Borins ([@MylesBorins](https://twitter.com/MylesBorins))

頂層await使開發者能夠在 async 函數之外使用 await 關鍵字。它像是一個大的 async 函數,會讓其他import它的模組在開始評估它們的主體之前等待。

弱引用與終結器

· 閱讀時間約 10 分鐘
Sathya Gunasekaran ([@_gsathya](https://twitter.com/_gsathya)), Mathias Bynens ([@mathias](https://twitter.com/mathias)), Shu-yu Guo ([@_shu](https://twitter.com/_shu)), 和 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 取得器和 increment 方法。更有趣的是,這個類別有一個建構子會創建 _count 實例屬性並將其預設值設定為 0。我們目前傾向使用底線前綴來表示 _count 不應直接被類別的用戶使用,但這只是一種慣例;它並不是語言強制的 真正 “私有”屬性。