string() 更稳妥,因可安全转换 null 和 undefined 为字符串,而 tostring() 会报错;tostring() 支持进制参数,string() 不支持;tostring() 是方法需调用主体,string() 是函数可直传参数。

数字转字符串时,toString() 和 String() 大多数情况下结果一样,但关键差异在容错性、调用方式和进制支持上。
能不能处理 null 或 undefined
这是最实际的分水岭:
-
String(null)→ 返回字符串 "null",不报错 -
String(undefined)→ 返回字符串 "undefined",不报错 -
null.toString()→ 直接抛出 TypeError -
undefined.toString()→ 同样抛出 TypeError
如果你不确定变量是否为空(比如服务端返回字段可能缺失),用 String() 更稳妥。
要不要转成二进制、十六进制等格式
toString() 支持传入进制参数,String() 不支持:
-
(255).toString(2)→ "11111111"(二进制) -
(255).toString(16)→ "ff"(十六进制) -
String(255)→ 只能是 "255",无论传什么参数都忽略
需要做颜色值、位运算或编码转换时,toString(radix) 是唯一选择。
调用写法和底层逻辑不同
toString() 是方法,必须有调用主体;String() 是函数,直接传参即可:
-
123.toString()会语法报错(点号被当成小数点),得写成(123).toString()或123..toString() -
String(123)没有语法限制,清晰直接 - 原始数字调用
toString()时,JS 会临时“装箱”为 Number 对象再执行,而String()是直接转换,略轻量
对非数字类型的一致性表现
虽然问题聚焦数字,但实际中常混用:
- 布尔值:
String(true)和true.toString()都返回 "true" - 数组:
String([1,2])和[1,2].toString()都返回 "1,2" - 对象:
String({})和{}.toString() 都返回 "[object Object]"
但只要涉及 null 或 undefined,toString() 就不可靠。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











