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
。