Symbol.prototype.toString()

toString() 方法是 Symbol 值的方法,它返回一个表示此符号值的字符串。

试一试

语法

js
toString()

参数

无。

返回值

表示指定符号值的字符串。

描述

Symbol 对象覆盖了 ObjecttoString 方法;它没有继承 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 的浏览器中加载。

另请参阅