string() 是 javascript 中最安全的显式转字符串方法,能统一处理 null、undefined、symbol、bigint 等所有类型并返回对应字符串,且不抛错;它优先调用对象的 tostring(),但不触发 symbol.toprimitive。

String() 是 JavaScript 中最直接、最安全的显式类型转换方法之一,用于把任意值转为字符串。它遵循 ECMAScript 规范定义的 ToString 抽象操作,行为稳定、无副作用,且不会抛错。
基本用法:直接调用 String() 函数
传入任意数据(包括 null、undefined、对象、数组、布尔值、数字、Symbol、BigInt 等),都会返回对应的字符串表示:
-
String(123)→"123" -
String(true)→"true" -
String(null)→"null" -
String(undefined)→"undefined" -
String([1, 2, 3])→"1,2,3"(调用数组的toString()) -
String({a: 1})→"[object Object]"(调用默认toString()) -
String(Symbol('foo'))→ 抛出TypeError(Symbol 不能隐式转字符串,但 String() 可以 →"Symbol(foo)") -
String(10n)→"10"(BigInt 支持)
和 + '' 拼接、toString() 的关键区别
避免混淆这三种常见写法:
-
String(x):安全通用,对null和undefined返回"null"、"undefined";对 Symbol 也支持。 -
x + '':属于隐式转换,底层仍调用 ToString,行为基本一致,但可读性稍差;同样能处理 null/undefined/Symbol。 -
x.toString():是实例方法,null和undefined会直接报错(Cannot read property 'toString' of null);Symbol 调用会报错(需用Symbol.prototype.toString()或String(sym))。
处理自定义对象时的控制权
若希望对象转字符串时输出特定内容,可定义 toString() 或 valueOf() 方法,String() 会优先使用 toString()(除非返回非原始值):
const obj = {
toString() { return 'MyObject'; }
};
String(obj); // "MyObject"
注意:不要在 toString() 中返回对象(如 {}),否则 String() 会退而尝试 valueOf(),最终可能回到 "[object Object]"。
不推荐但需知道的边界情况
虽然 String() 很可靠,但仍有两点值得注意:
-
String(new String("hello"))→"hello"(包装对象会被拆箱) -
String({ [Symbol.toPrimitive]: () => 'custom' })→ 仍返回"[object Object]",因为String()不触发[Symbol.toPrimitive](仅在 +、==、>= 等运算中触发)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











