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

浏览器兼容性

另见