前两天帮朋友看个诡异问题!数据库里订单号 1523728471234567890,前端一点开详情页,id 直接变成 1523728471234567800,最后几位整个飘了。俩人盯着日志对着念,差点怀疑人生,以为哪步被注入了。
查了半天才回过味来:JSON 里的大整数在 JS 里会被当成 Number 解析,双精度浮点就 53 位有效数字,超出直接四舍五入截断。后端雪花算法吐出来的 19 位 id,前端 JSON.parse 一接,低位直接蒸发。稳,这坑踩得明明白白!
解法不难,让后端把 id 当字符串返回就完事,或者前端接个 bigint 库处理。牛啊说真的,数字明明是对的,隔着一层 JSON 就被偷偷改掉,这种背刺感真够呛。