Symbol.prototype.toString()
Symbol
值的 toString()
方法返回表示该符号值的字符串。
¥The toString()
method of Symbol
values returns a string representing this symbol value.
Try it
语法
参数
返回值
描述
¥Description
Symbol
对象重写了 Object
的 toString
方法;它不继承 Object.prototype.toString()
。对于 Symbol
值,toString
方法返回 "Symbol(description)"
形式的描述性字符串,其中 description
是符号的 description。
¥The Symbol
object overrides the toString
method of Object
; it does not inherit
Object.prototype.toString()
. For Symbol
values, the toString
method returns a descriptive string in the form "Symbol(description)"
, where description
is the symbol's description.
toString()
方法要求其 this
值是 Symbol
基元或封装对象。它为其他 this
值抛出 TypeError
,而不尝试将它们强制为符号值。
¥The toString()
method requires its this
value to be a Symbol
primitive or wrapper object. It throws a TypeError
for other this
values without attempting to coerce them to symbol values.
因为 Symbol
有一个 [Symbol.toPrimitive]()
方法,所以当 Symbol
对象是 强制为字符串 时,该方法始终优先于 toString()
。但是,由于 Symbol.prototype[Symbol.toPrimitive]()
返回符号基元,而符号基元在隐式转换为字符串时会抛出 TypeError
,因此该语言永远不会隐式调用 toString()
方法。要对符号进行字符串化,你必须显式调用其 toString()
方法或使用 String()
函数。
¥Because Symbol
has a [Symbol.toPrimitive]()
method, that method always takes priority over toString()
when a Symbol
object is coerced to a string. However, because Symbol.prototype[Symbol.toPrimitive]()
returns a symbol primitive, and symbol primitives throw a TypeError
when implicitly converted to a string, the toString()
method is never implicitly called by the language. To stringify a symbol, you must explicitly call its toString()
method or use the String()
function.
示例
使用 toString()
隐式调用 toString()
¥Implicitly calling toString()
让 JavaScript 在符号封装对象上隐式调用 toString()
而不是 [Symbol.toPrimitive]()
的唯一方法是首先通过 deleting 和 [Symbol.toPrimitive]()
方法。
¥The only way to make JavaScript implicitly call toString()
instead of [Symbol.toPrimitive]()
on a symbol wrapper object is by deleting the [Symbol.toPrimitive]()
method first.
警告:在实践中你不应该这样做。除非你确切知道自己在做什么,否则永远不要改变内置对象。
¥Warning: You should not do this in practice. Never mutate built-in objects unless you know exactly what you're doing.
delete Symbol.prototype[Symbol.toPrimitive];
console.log(`${Object(Symbol("foo"))}`); // "Symbol(foo)"
规范
Specification |
---|
ECMAScript Language Specification # sec-symbol.prototype.tostring |
浏览器兼容性
BCD tables only load in the browser
也可以看看
¥See also