Symbol

2 位贡献者:

这篇翻译不完整。请帮忙从英语翻译这篇文章

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

摘要

符号 是一种特殊的、不可变的数据类型,可以作为对象属性的标识符使用。符号对象是一个符号 原始数据类型的隐式对象包装器。

语法

Symbol([description])

参数

description 可选
可选的,字符串。符号的描述可用于调试而不是访问符号本身。

描述

创建一个新的原始符号, 你可以使用Symbol()和一个可选字符串作为它的描述

var sym1 = Symbol();
var sym2 = Symbol("foo");
var sym3 = Symbol("foo");

上面的代码创建三个新的符号。 注意,Symbol("foo") 不会强制字符串 “foo” 进入一个符号。它每次都创建一个新的符号:

Symbol("foo") === Symbol("foo"); // false

下面使用 new运算符的语法将会抛出一个 TypeError错误:

var sym = new Symbol(); // TypeError

这阻止作者创建一个显示的符号包装器对象而不是一个新的符号值。围绕原始数据类型创建一个显示包装器对象从ECMAScript 6开始不再被支持。 然而,现有的原始包装器对象,如 new Boolean、 new String以及new Number因为遗留原因仍可被创建。

全局符号注册表中的共享符号

上面的语法使用Symbol() 函数 不会在你的整个代码库中创建一个可用的全局符号。 To create symbols available across files and in a global scope-like environment, use the methods Symbol.for() and Symbol.keyFor() to set and retrieve symbols from the global symbol registry.

在对象中查找符号属性

方法Object.getOwnPropertySymbols() 让你在查找一个给定对象的符号属性时返回一个符号类型的数组。注意,每个初始化的对象都是没有自己的符号属性的,因此这个数组可能为空。除非你已经在对象上设置了符号属性。

属性

Symbol.length
长度属性值为1。
Symbol.name
仅Chrome/v8。返回符号描述。
Symbol.prototype
描述符号构造函数的原型。

众所周知的符号

除了你自己的符号,JavaScript还内建了一些在ECMAScript 5 之前没有暴露给开发者的符号,它们代表了内部语言行为。这些符号可以使用以下属性访问:

Symbol.create
Specified as @@create. A method used to allocate an object.
Symbol.hasInstance
Specified as @@hasInstance. A method determining if a constructor object recognizes an object as its instance. Used by instanceof.
Symbol.isConcatSpreadable
Specified as @@isConcatSpreadable. A Boolean value indicating if an object should by flatten to its array elements by Array.prototype.concat().
Symbol.isRegExp
Specified as @@isRegExp. A Boolean value indicating if an object may be used as a regular expression.
Symbol.iterator
Specified as @@iterator. A method returning the default iterator for an object. Used by for...of.
Symbol.toPrimitive
Specified as @@toPrimitive. A method converting an object to a primitive value.
Symbol.toStringTag
Specified as @@toStringTag. A string value used for the default description of an object. Used by Object.prototype.toString()
Symbol.unscopables
指定为 @@unscopables. 一个字符值数组即是属性值。An Array of string values that are property values. These are excluded from the with environment bindings of the associated objects.

方法

Symbol.for(key)
使用给定的key搜索现有符号,如果找到则返回符号。否则将得到一个新的使用给定的key在全局符号注册表中创建的符号。
Symbol.keyFor(sym)
为给定符号从全局符号注册表中检索一个共享符号键。

符号原型

所有符号继承自 Symbol.prototype.

属性

Symbol.prototype.constructor
Returns the function that created an instance's prototype. This is the Symbol function by default.

方法

Symbol.prototype.toSource()
Returns a string containing the source of the Symbol object. Overrides the Object.prototype.toSource() method.
Symbol.prototype.toString()
Returns a string of containing the description of the Symbol. Overrides the Object.prototype.toString() method.
Symbol.prototype.valueOf()
Returns the primitive value of the Symbol object. Overrides the Object.prototype.valueOf() method.

示例

使用typeof运算符 与符号

 typeof运算符能帮助你识别(标识)符号

typeof Symbol() === 'symbol'
typeof Symbol('foo') === 'symbol'
typeof Symbol.iterator === 'symbol'

技术标准

标准 状态 意见
ECMAScript 6 (ECMA-262)
Symbol
Release Candidate 原始定义

浏览器兼容性

功能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) 33.0 (33.0) 未实现 未实现 未实现
Well-known symbols 未实现 only Symbol.iterator (@@iterator) 未实现 未实现 未实现
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) 33.0 (33.0) 未实现 未实现 未实现
Well-known symbols 未实现 未实现 only Symbol.iterator (@@iterator) 未实现 未实现 未实现

See also

文档标签和贡献者

向此页面作出贡献: X-Cracker, fscholz
最后编辑者: X-Cracker,