symbol.tostringtag 是用于自定义 object.prototype.tostring() 返回字符串标签的内置符号,需设为字符串,不可枚举不可配置,影响调试识别与库兼容性但不影响 json 序列化。

Symbol.toStringTag 是 JavaScript 中一个内置的符号(Symbol),用于自定义对象在调用 Object.prototype.toString() 时返回的字符串标签。它不改变对象本身的行为,只影响 toString() 方法输出的类型标识。
作用:控制 Object.prototype.toString() 的返回值
默认情况下,Object.prototype.toString.call(obj) 返回形如 [object Type] 的字符串,其中 Type 由对象内部的 [[Class]] 或现代规范中的 @@toStringTag 决定。通过设置 Symbol.toStringTag 属性,可以显式指定这个 Type 部分。
- 对普通对象、函数、类实例等都有效
- 该属性必须是字符串(或可转为字符串的值)
- 不可枚举、不可配置(但可写,除非被冻结)
基本用法示例
直接在对象上定义该 symbol 属性:
const myObj = {
[Symbol.toStringTag]: 'MyCustomType'
};
console.log(Object.prototype.toString.call(myObj)); // "[object MyCustomType]"
类中常用方式(更典型):
class Collection {
get [Symbol.toStringTag]() {
return 'Collection';
}
}
const c = new Collection();
console.log(Object.prototype.toString.call(c)); // "[object Collection]"
常见应用场景
- 调试与类型识别:让自定义类在控制台或调试工具中显示更清晰的类型名
-
框架/库兼容性:某些库(如 Vue、Lodash)会检查
toString()结果来判断类型,合理设置有助于正确识别 -
模拟原生类型行为:例如使自定义数组类在
toString()中显示[object Array](需谨慎,可能引发混淆)
注意事项
- 仅影响
Object.prototype.toString(),不影响obj.toString()(除非你重写了该方法) - 不能用点语法访问:
obj.Symbol.toStringTag是错的;必须用方括号或计算属性名 - 原生类型(如 Date、Array)已内置该 symbol,通常无需覆盖;若强行改写,可能破坏依赖原生行为的代码
- JSON 序列化不包含 symbol 属性,因此不影响
JSON.stringify()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











