0x000 概述
Symbol
是es6
新的基础数据范例,所以es
以后的数据范例以下:
基础数据范例:
Boolean
Null
Undefined
Number
String
Symbol
援用范例
Object
0x001 Symbol()
语法
Symbol([description])
-
description
:形貌,可选字符串
-
例子
Symbol() Symbol(1) Symbol('string')
申明:
运用Symbol()
初始化的变量是完整差别的两个变量,description
只是一个形貌罢了,没有任何意义。Symbol(1)===Symbol(1) // false
能够运用
typeof
来推断Symbol
范例typeof Symbol('1') // "symbol"
0x002 Symbol.for()
语法:
Symbol.for(key);
-
key
:与该Symbol
相干系的一个名字,能够经由过程这个名字猎取Symbol
实例。
-
例子:
Symbol.for(1) Symbol.for('string')
申明:
和Symbol()
实例化的Symbol
实例差别,运用Symbol.for()
实例化的实例在全局保留,雷同的两个key
返回的Symbol
实例是一样的。也就是说,运用Symbol.for(key)
实例化一个Symbol
数据范例的时刻,假如全局不存在这个key
对应的symbol
,则全局建立一个key
对应的symbol
,假如全局存在,则直接返回这个key
对应的Symbol
。Symbol.for('string')===Symbol.for('string') // true
0x003 Symbol.keyFor(key)
语法
Symbol.keyFor(sym);
参数:
-
sym
:Symbal
实例
-
返回值:
-
string
:返回这个Symbol
实例的key
-
例子
let sym=Symbol.for('string') console.log(Symbol.keyFor(sym)) // 'string'
申明
Symbol(description)
的description
和Symbol.for(key)
的key
是不一样的,description
只是一个形貌,除了调试没有任何现实用处,没法经由过程description
猎取这个Symbol
实例:let sym= Symbol('sss') Symbol.for('sss')===sym // false Symbol.keyFor(sym) // undefined
所以,
Symbol.keyFor
也只能猎取Symbol.for
实例化的Symbol
的key
。