Symbol.prototype.toString()

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 2015 年 9 月以来,该特性已在各大浏览器中可用。

toString() 方法 Symbol 值返回一个表示该符号值的字符串。

试一试

console.log(Symbol("desc").toString());
// Expected output: "Symbol(desc)"

console.log(Symbol.iterator.toString());
// Expected output: "Symbol(Symbol.iterator)

console.log(Symbol.for("foo").toString());
// Expected output: "Symbol(foo)"

// console.log(Symbol('foo') + 'bar');
// Expected output: Error: Can't convert symbol to string

语法

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® 2026 语言规范
# sec-symbol.prototype.tostring

浏览器兼容性

另见