前两天帮一朋友看个 bug,后端用的是雪花 ID,十九位那種。接口返回明明是 1293819283718273645,到前端打印出来变成了 1293819283718273600,后面几位全成了零。朋友还以为数据库写串了,急得不行。
其实不是数据库的事,是 JS 的 Number 类型只有 53 位精度,超过安全整数范围(2^53-1)就开始丢。后端把 ID 当数字返回,前端一解析,低位直接被四舍五入吃掉。
后来让他俩沟通了下,后端把 ID 改成字符串返回,前端当字符串存着,要传给后端时原样带回去,问题就消了。嗯嗯
会好的小提醒一句:凡是 ID、订单号这种长数字,前后端都尽量用字符串走,别让它当数字过一遍 JS。看着不起眼,真翻车的时候查起来挺费劲的。辛苦了,遇到这种坑别慌,慢慢顺藤摸瓜就好。