const text = '{"orderId":1234567890123456789}';
const data = JSON.parse(text, (k, v) =>
  k === 'orderId' ? String(v) : v);
console.log(data.orderId);

订单号十九位,前端拿到后显示成近似值,末几位与原单号不一致,查单总是失败。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,JS 的 Number 只能精确表示 53 位二进制内的整数,超出部分被舍入。

「JS 大整数精度」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

报错里带路径的,先去看那个路径在不在、权限对不对。同一份配置存在多处的,先确认改的是被加载的那一份。

处理上按这个顺序:接口把长整型改为字符串返回;前端统一按字符串处理;确需运算时用 BigInt。

改完只确认一件事:页面展示的订单号与后台完全一致,复制粘贴到查询页能查到对应订单。

作者 9823189