接口返回的订单号是 19 位数字,前端接进来再传出去,末几位全变成了 0,因为 Number 的精度只到 2 的 53 次方。js数字转换成字符串这件事,选对方法能避开不少坑。
三种常用写法
String(123)、(123).toString()、'' + 123 都能得到字符串,模板字符串 `${n}` 拼日志时最顺手。数字字面量直接点 toString 会出错,123.toString() 被解析成小数点,要写成 (123).toString() 或者 123..toString()。
null 和 undefined 会翻车
String(null) 得到 'null','' + undefined 得到 'undefined',都不是空串。接口字段可能为空时,先判断再转,或者用 (n ?? '') + '' 兜底。toString 对 null 直接抛 TypeError,报错是 Cannot read properties of null。JSON.stringify 会自动调用对象的 toJSON,数字转字符串的场景要留意这一点。
长数字别用 Number 中转
身份证号、订单号这类超过 15 位的数字,一旦进了 Number 就已经丢精度,再转字符串也救不回来。让接口直接返回字符串,或者用 BigInt 接收再 toString。前端展示长数字,别用 parseInt 转来转去。
进制转换靠 toString 参数
(255).toString(16) 得到 'ff',(8).toString(2) 得到 '1000',反向用 parseInt('ff', 16)。做颜色值、权限位运算时经常用到。注意 toString(2) 对负数会带个减号,补码形式得自己处理。数组转字符串用 join,默认逗号分隔,别和单值转换混着用。
日常拼接用模板字符串,明确要字符串类型用 String(),带进制用 toString(radix)。js数字转换成字符串没有唯一答案,按场景选,长数字从源头就用字符串。Number 和 parseInt 是反方向的操作,转换前先确认入参干净,别把空串转成 0。