写八年JS,我发现ES2026把三个常用工具函数悄悄原生化了——这件事把精度计算、迭代器处理、异步数据流的账全变了

写过八年 JS,每次 ECMAScript 发新版本我都只挑几个用得上的记。但 ES2026 这一版不太一样——大部分改动根本不需要你主动去用,浏览器自己就帮你搞定了。

比如高精度求和,以前要靠第三方库处理金额计算,现在浏览器自己会算。迭代器合并,以前要手写循环拼,现在一行代码搞定。异步数组构建,以前要 Promise.all 套来套去,现在一个 fromAsync 全包了。

我把这些变化分了两类:需要你主动换的悄悄就能用的。主动换的不多,悄悄用的占大多数。


悄悄就能用的:这些不用改代码

Math.sumPrecise:高精度求和终于原生了

金融场景里,浮点数累加精度丢失的问题存在了快十年。以前要么引入 decimal.js,要么自己写大数处理。

ES2026 给了 Math.sumPrecise:

// 以前:精度丢失
const sum = 0.1 + 0.2 + 0.3; // 0.6000000000000001

// 现在:浏览器帮你算准
const precise = Math.sumPrecise([0.1, 0.2, 0.3]); // 0.6

Chrome 129 已支持。这个不需要你迁移任何代码,浏览器原生提供,你直接用就行。

Iterator.concat:多个迭代器一键合并

数据处理时经常遇到「这个 API 返回迭代器,那个也返回迭代器,我要串起来用」的场景。以前要写个循环或者用第三方库:

// 以前:手写合并逻辑
function* concat(iter1, iter2) {
  yield* iter1;
  yield* iter2;
}

// 现在:一行搞定
const combined = Iterator.concat([iter1, iter2, iter3]);

这个也不需要你主动升级,发现手头有类似拼接迭代器的代码,直接换成这个就行。

Array.fromAsync:异步数据源直接进数组

fetch 返回的流、ReadableStream、Generator——这些异步可迭代对象,以前要手动转数组:

// 以前:Promise.all 套多层
const data = await Promise.all([
  fetch('/api/1').then(r => r.json()),
  fetch('/api/2').then(r => r.json()),
]);

// 现在:直接丢进去
const data = await Array.fromAsync(fetch水流);

这个在处理批量接口时特别有用,代码从三层嵌套变成一层。

Error.isError:终于能准确识别错误对象了

// 以前:靠 constructor.name 或者 instanceof 判断
if (err.constructor.name === 'Error') { ... }

// 现在:原生方法
if (Error.isError(err)) { ... }

这个看起来简单,但以前判断「某个值是不是 Error 对象」其实没有统一标准,不同执行环境表现还不一样。现在有标准方法了。


需要你主动换的:这两个值得改

Map.prototype.getOrDefault:键不存在时返回默认值

// 以前:手动判断
const val = map.has(key) ? map.get(key) : defaultValue;

// 现在:一步到位
const val = map.getOrDefault(key, defaultValue);

值不值得改?看你的代码里有多少 has + get 的模式。如果大量存在,换过去代码清爽很多。

JSON.parse reviver 新参数:能拿到原始匹配片段了

// 以前:reviver 只能拿到当前路径
JSON.parse(text, (key, value) => {
  // 拿不到原始文本片段
});

// 现在:能拿到原始片段了
JSON.parse(text, { 
  reviver: (key, value, context) => { 
    // context.raw 拿到了 JSON 源文本中的匹配片段
  }
});

做序列化库或者需要精细化解析的场景,这个很有用。普通业务代码里可能用不上。


迁移建议:什么都不用做,但要知道自己少了多少债

ES2026 这批更新,大多数不需要你改代码。新项目直接用就行,老项目如果没有相关场景也不需要急着动。

值得做一件事:扫一遍代码库里有没有自己写的「高精度求和」「迭代器合并」「异步数组构建」工具函数。有的话,标记为「可删除」——浏览器的原生实现比你自己写的更稳定、更快,还省依赖。

ES2026 这版的主题就一个:浏览器帮你干活,你退到一边看着就行。

评论区

0 条评论

登录后可评论。

阿柯·前端架构 11 阅读