私有品牌檢查,也就是 `#foo in obj`
The in
operator 可用於測試給定的物件(或其原型鏈上的任何物件)是否具有給定屬性:
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
操作符無法找到這些繼承的字段:
類別靜態初始化區塊
新的類別靜態初始化區塊語法允許開發者將應該在某個類別定義中執行一次的代碼集中到一個地方。以下是一個示例,其中一個偽隨機數生成器使用靜態區塊在 class MyPRNG
定義被評估時初始化熵池一次。
WebAssembly 與 JavaScript BigInt 的整合
JS-BigInt-Integration 功能讓 JavaScript 和 WebAssembly 之間的 64 位元整數傳遞變得簡單。本文解釋這代表什麼及其用途,包括使開發人員更容易、更快地執行程式碼,並加速建構時間。
`Atomics.wait`, `Atomics.notify`, `Atomics.waitAsync`
Atomics.wait
和 Atomics.notify
是低層同步原型,適合用於實現互斥鎖及其他同步方式。然而,由於 Atomics.wait
是阻塞操作,因此無法在主執行緒上呼叫(嘗試這樣做會拋出 TypeError
)。
邏輯賦值
JavaScript 支持一系列複合賦值運算符,允許程式員簡潔地表達二元運算與賦值操作。目前僅支持數學運算或位元運算。
`Intl.DisplayNames`
面向全球使用者的網頁應用需要以多種語言展示語言、地區、文字書寫系統和貨幣的名稱。這些名稱的翻譯需要數據,而這些數據可從 Unicode CLDR 獲取。將這些數據作為應用的一部分進行打包會增加開發成本。用戶傾向於一致的語言和地區名稱翻譯,並且隨著世界的地緣政治變化保持數據的最新需要不斷的維護。
快速、平行應用程式與 WebAssembly SIMD
SIMD 代表 單指令,多資料。SIMD 指令是一種特別的指令類型,通過同時對多個資料元素進行相同的操作來利用應用程式中的資料平行性。對計算密集型應用程式,例如音訊/影片編解碼器、影像處理器,都是利用 SIMD 指令加速性能的典型範例。大多數現代架構都支援某些種類的 SIMD 指令。
正則表達式匹配索引
JavaScript 現在配備了一項新的正則表達式增強功能,稱為「匹配索引」。假設您想在 JavaScript 代碼中找到與保留字重合的無效變量名,並在變量名稱下方顯示插入符號和「下劃線」,例如:
`String.prototype.replaceAll`
如果你曾經在 JavaScript 中處理過字串,很可能遇到過 String#replace
方法。String.prototype.replace(searchValue, replacement)
根據你指定的參數返回一個進行部分匹配替換後的字串: