JavaScript 2025 正式上線(xiàn)——這波更新,真有點(diǎn)燃
我數(shù)不清多少次邊寫(xiě)邊吐槽:“這玩意兒怎么還沒(méi)內(nèi)置?”過(guò)幾個(gè)月翻 TC39 提案——果然在醞釀。 再過(guò)兩年——終于落地。
今年?JS 2025 上線(xiàn)的這些特性,讓我差點(diǎn)對(duì)著屏幕來(lái)個(gè)拳碰拳。 別翻白眼,這次不是什么“語(yǔ)法糖小補(bǔ)丁”,而是真材實(shí)料。
?? 全局迭代器助手
有沒(méi)有遇到過(guò):你對(duì)數(shù)組瘋狂 .map().filter()
,結(jié)果數(shù)據(jù)不是數(shù)組,只是可迭代?
然后開(kāi)始尷尬的 Array.from()
體操。
現(xiàn)在好了,迭代器本身就能鏈?zhǔn)酵?/span>:.map()
、.filter()
、.take()
……直接在 iterable 上用。
function* numbers() {
for (let i = 1; i <= 10; i++) yield i;
}
const doubledOdds = numbers()
.filter(n => n % 2)
.map(n => n * 2)
.toArray();
console.log(doubledOdds); // [2, 6, 10, 14, 18]
數(shù)據(jù)流可以懶計(jì)算一路走到底,不用在“可迭代 ? 數(shù)組”之間來(lái)回折騰。
25 年了,但誰(shuí)在意呢。
?? Set 新方法
我很愛(ài) Set
。
但這么多年它就像那個(gè)半吊子朋友:有用,但沒(méi)有并集/交集/差集這類(lèi)最基本工具。
現(xiàn)在,都有了:
set.union(other)
set.intersection(other)
set.difference(other)
const a = new Set([1, 2, 3]);
const b = new Set([3, 4]);
console.log(a.union(b)); // Set {1, 2, 3, 4}
console.log(a.intersection(b)); // Set {3}
console.log(a.difference(b)); // Set {1, 2}
來(lái)得有點(diǎn)晚?
JSON 模塊——像個(gè)大佬一樣引入數(shù)據(jù)
以前加載配置要來(lái)一套:fs.readFile → JSON.parse
。 現(xiàn)在直接像導(dǎo)代碼一樣導(dǎo) JSON:
import config from './config.json' assert { type: 'json' };
console.log(config.theme);
瀏覽器、Node 兩邊都行。
更少的樣板,更少的坑,更少的周一崩潰。
正則升級(jí)——疼痛感下降
正則是“迫不得已才聯(lián)系的老朋友”。 今年它真的好用一點(diǎn):
v
標(biāo)志(Unicode sets):字符類(lèi)更強(qiáng)大;- 更合理的轉(zhuǎn)義規(guī)則:少些反斜杠,多點(diǎn)清醒;
- 匹配索引(match indices):終于能直接拿到匹配位置,不用像會(huì)計(jì)一樣數(shù)字符。
?? Float16Array
——內(nèi)存緊湊新武器
大規(guī)模數(shù)值數(shù)據(jù)如果用 Float32Array
還是偏胖。Float16Array
讓你用半精度浮點(diǎn),內(nèi)存直接砍半。
完美嗎?不。 會(huì)有精度損失,但在 ML/圖形/傳感器數(shù)據(jù) 場(chǎng)景是實(shí)打?qū)嵉?/span>性能收益。 做待辦應(yīng)用?別湊熱鬧。
這波更新,值不值?
JS 2025 罕見(jiàn)地給了我們真正在用的能力,而不是“沒(méi)人點(diǎn)單的抽象菜”。迭代器助手就能讓你把一堆“轉(zhuǎn)數(shù)組”的贅肉刪掉, 我甚至有點(diǎn)期待重讀 2024 的倉(cāng)庫(kù)(至少,眼睛不會(huì)那么疼)。
想吐槽“這些 ES6 就該有”的,評(píng)論區(qū)見(jiàn)。 想開(kāi)團(tuán)戰(zhàn)也行,拉上你的群開(kāi)吵。