Symbol.prototype.toString()
toString()
方法是 Symbol
值的方法,它返回一个表示此符号值的字符串。
试一试
语法
js
toString()
参数
无。
返回值
表示指定符号值的字符串。
描述
Symbol
对象覆盖了 Object
的 toString
方法;它没有继承 Object.prototype.toString()
。对于 Symbol
值,toString
方法返回一个描述性字符串,格式为 "Symbol(description)"
,其中 description
是符号的 描述。
toString()
方法要求其 this
值为 Symbol
原语或包装器对象。对于其他 this
值,它会抛出 TypeError
,而不会尝试将其强制转换为符号值。
因为 Symbol
有一个 [Symbol.toPrimitive]()
方法,所以当 将 Symbol
对象强制转换为字符串 时,该方法始终优先于 toString()
。但是,因为 Symbol.prototype[Symbol.toPrimitive]()
返回一个符号原语,并且当符号原语隐式转换为字符串时会抛出 TypeError
,所以语言永远不会隐式调用 toString()
方法。要将符号转换为字符串,必须显式调用其 toString()
方法或使用 String()
函数。
示例
使用 toString()
js
Symbol("desc").toString(); // "Symbol(desc)"
// well-known symbols
Symbol.iterator.toString(); // "Symbol(Symbol.iterator)"
// global symbols
Symbol.for("foo").toString(); // "Symbol(foo)"
隐式调用 toString()
使 JavaScript 隐式调用 toString()
而不是 [Symbol.toPrimitive]()
的唯一方法是在符号包装器对象上先 删除 [Symbol.toPrimitive]()
方法。
警告:在实践中你不应该这样做。除非你完全知道自己在做什么,否则永远不要修改内置对象。
js
delete Symbol.prototype[Symbol.toPrimitive];
console.log(`${Object(Symbol("foo"))}`); // "Symbol(foo)"
规范
规范 |
---|
ECMAScript 语言规范 # sec-symbol.prototype.tostring |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。