模板字符串插入对象时默认调用tostring()返回"[object object]",可自定义tostring()或symbol.toprimitive改变输出,null/undefined直接转为对应字符串。

在模板字符串中插入对象时,JavaScript 会自动调用该对象的 toString() 方法进行隐式转换,从而生成字符串表示。这个过程不是直接“转成空字符串”或“报错”,而是有明确的调用链和默认行为。
对象默认被转成 "[object Object]"
当你写这样的代码:
`Hello ${obj}`JS 引擎会尝试把 obj 转为原始值(primitive),优先使用 toString(), fallback 到 valueOf()。普通对象没有自定义这两个方法时,就走内置逻辑:
-
toString()返回"[object Object]" -
valueOf()返回对象本身(不是原始值,所以不被采用)
可自定义 toString() 改变输出
如果对象实现了 toString(),模板字符串就会用它:
`Hi ${obj}` // → "Hi Alice"
Symbol.toPrimitive 优先级更高
如果对象还定义了 [Symbol.toPrimitive](hint),它会在类型转换中优先于 toString() 和 valueOf() 被调用。模板字符串属于字符串上下文,所以 hint 是 "string":
[Symbol.toPrimitive](hint) {
return hint === 'string' ? 'Custom' : 42;
}
};
`Value: ${obj}` // → "Value: Custom"
null 和 undefined 的特殊处理
它们不会调用 toString(),而是直接转成字符串 "null" 和 "undefined":
`${undefined}` // "undefined"
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











