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

瀏覽器相容性

另見