本系列文章經過重新編排和擴充,已出書為ECMAScript關鍵30天。原始文章因當時準備時程緊迫,多少有些許錯誤。為了避免造成讀者的困擾,以及配合書籍的內容規劃,將會陸續更新本系列文章。
本篇文章在 2021/11/2 已更新。
Intl
Intl是International的縮寫,意思是國際化的。每個地區因語系、國家、時區的不同,在文字、數值、時間日期等格式會不盡相同。因此,ECMAScript集合了相關的格式化內建物件,將Intl
作為這個集合的命名空間。
new Intl.ListFormat(locales,options)
將一連串的文字串接,根據語系地區的不同,以連接詞或標點符號銜接在一起,組成一段有語意的內容。
const nameList = ['Yuri', 'Bob', 'Joe'];
const listFormat1 = new Intl.ListFormat('zh-Hant-TW', {
type: 'conjunction',
});
console.log(listFormat1.format(nameList)); // Yuri、Bob和Joe
WeakRef
除了前面章節提到的WeakSet
、WeakMap
之外,ES2021時又釋出全新的標準內建物件-WeakRef
,讓開發者自訂的物件,也能擁有弱參考的特性。
new WeakRef(target)
使用標準內建物件WeakRef
提供的建構函式建立。
const input = document.querySelector('input');
const inputWR = new WeakRef(input);
FinalizationRegistry
如果想要物件被GC後,可以執行特定的事件邏輯,例如清除跟物件相關的資料等,可以使用 FinalizationRegistry
進行物件的註冊管理。
function finalizerCallback(heldValue) {
if (heldValue === 'target-a') {
console.log('Target A 已被移除!');
} else if (heldValue === 'target-b') {
console.log('Target B 已被移除!');
}
// ...
}
const finalizers = new FinalizationRegistry(finalizerCallback);