Symbol.for()

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 2015 年 9 月以來,該特性已在各大瀏覽器中可用。

Symbol.for() 靜態方法會在一個執行時範圍內的全域性 Symbol 登錄檔中搜索具有給定鍵的現有 Symbol,如果找到則返回它。否則,會在全域性 Symbol 登錄檔中建立一個具有此鍵的新 Symbol。

試一試

console.log(Symbol.for("bar") === Symbol.for("bar"));
// Expected output: true

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

const symbol1 = Symbol.for("foo");

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

語法

js
Symbol.for(key)

引數

key

字串,必需。Symbol 的鍵(也用於 Symbol 的描述)。

返回值

如果找到,則返回具有給定鍵的現有 Symbol;否則,建立一個新的 Symbol 並返回。

描述

Symbol() 不同,Symbol.for() 函式建立一個可在全域性 Symbol 登錄檔中使用的 Symbol。Symbol.for() 也並非每次呼叫都一定會建立一個新的 Symbol,而是首先檢查登錄檔中是否已存在具有給定 key 的 Symbol。如果存在,則返回該 Symbol。如果未找到具有給定鍵的 Symbol,Symbol.for() 將建立一個新的全域性 Symbol。

示例

使用 Symbol.for()

js
Symbol.for("foo"); // create a new global symbol
Symbol.for("foo"); // retrieve the already created symbol

// Same global symbol, but not locally
Symbol.for("bar") === Symbol.for("bar"); // true
Symbol("bar") === Symbol("bar"); // false

// The key is also used as the description
const sym = Symbol.for("mario");
sym.toString(); // "Symbol(mario)"

為了避免全域性 Symbol 鍵與你的其他(庫程式碼)全域性 Symbol 發生名稱衝突,最好為你的 Symbol 新增字首。

js
Symbol.for("mdn.foo");
Symbol.for("mdn.bar");

規範

規範
ECMAScript® 2026 語言規範
# sec-symbol.for

瀏覽器相容性

另見