Symbol.for()
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 |
浏览器兼容性
加载中…