Symbol() 构造函数

Baseline 已广泛支持

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

Symbol() 函数返回 Symbol 类型的原始值。

试一试

const symbol1 = Symbol();
const symbol2 = Symbol(42);
const symbol3 = Symbol("foo");

console.log(typeof symbol1);
// Expected output: "symbol"

console.log(symbol2 === 42);
// Expected output: false

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

console.log(Symbol("foo") === Symbol("foo"));
// Expected output: false

语法

js
Symbol()
Symbol(description)

注意: Symbol() 只能在不带 new 的情况下调用。尝试使用 new 来构造它会抛出 TypeError

参数

description 可选

一个字符串。符号的描述,可用于调试,但不能用于访问符号本身。

示例

创建 Symbol

要创建新的原始 Symbol,请使用 Symbol(),并可选择提供一个字符串作为其描述。

js
const sym1 = Symbol();
const sym2 = Symbol("foo");
const sym3 = Symbol("foo");

上面的代码创建了三个新的 Symbol。请注意,Symbol("foo") 并不会将字符串 "foo" 转换为 Symbol。它每次都会创建一个新的 Symbol。

js
Symbol("foo") === Symbol("foo"); // false

new Symbol()

以下带有 new 运算符的语法会抛出 TypeError

js
const sym = new Symbol(); // TypeError

这可以防止开发者创建显式的 Symbol 包装对象,而不是新的 Symbol 值,并且可能令人惊讶,因为围绕原始数据类型创建显式包装对象通常是可能的(例如,new Booleannew Stringnew Number)。

如果你确实想创建一个 Symbol 包装对象,可以使用 Object() 函数。

js
const sym = Symbol("foo");
const symObj = Object(sym);
typeof sym; // "symbol"
typeof symObj; // "object"

规范

规范
ECMAScript® 2026 语言规范
# sec-symbol-constructor

浏览器兼容性

另见