Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Symbol.for()

该特性处于 ECMAScript 6 规范草案中,目前的实现在未来可能会发生微调,请谨慎使用。

概述

Symbol.for(key) 方法会根据给定的键 key,来从 symbol 注册表中找到对应的 symbol,如果找到了,则返回它,否则,新建一个与该键关联的 symbol,并放入 symbol 注册表中。

语法

Symbol.for(key);

参数

key
一个字符串,作为 symbol 注册表中与某 symbol 关联的键(同时也会作为该 symbol 的描述)。

描述

Symbol() 不同的是,用 Symbol.for() 方法创建的的 symbol 会被放入一个叫 symbol 注册表的记录表中,当第二次获取相同键的 symbol 时,Symbol.for() 会直接返回上次存储的那个,不会再新建一个。

symbol 注册表

symbol 注册表中的记录结构:

symbol 注册表中的一个记录
字段名 字段值
[[key]] 一个字符串,用来标识每个 symbol
[[symbol]] 存储的 symbol 值

示例

Symbol.for("foo"); // 创建一个 symbol 并放入 symbol 注册表中,键为 "foo"
Symbol.for("foo"); // 从 symbol 注册表中读取键为"foo"的 symbol


Symbol.for("bar") === Symbol.for("bar"); // true,证明了上面说的
Symbol("bar") === Symbol("bar"); // false,Symbol() 函数每次都会返回新的一个 symbol


var sym = Symbol.for("mario");
sym.toString(); 
// "Symbol(mario)",mario 既是该 symbol 在 symbol 注册表中的键名,又是该 symbol 自身的描述字符串

为了防止冲突,最好给你要放入 symbol 注册表中的 symbol 带上键前缀。

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

规范

Specification Status Comment
ECMAScript 6 (ECMA-262)
Symbol.for
Release Candidate Initial definition.

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 未实现 33.0 (33.0) 未实现 未实现 未实现
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support 未实现 未实现 33.0 (33.0) 未实现 未实现 未实现

相关链接

文档标签和贡献者

 此页面的贡献者: ziyunfei
 最后编辑者: ziyunfei,