1. 程式人生 > 實用技巧 >ES6新增資料型別Symbol

ES6新增資料型別Symbol

Symbol的含義?

ES6(2015) 引入了第七種原始資料型別SymbolSymbol英文文意思為 符號、象徵、標記、記號,在 js 中更確切的翻譯應該為獨一無二

 Symbol的使用?

Symbol 值通過Symbol函式生成,這裡需要注意Symbol函式前不能使用new命令,切記,切記,切記
let sym = Symbol()



1、接受一個字串型別的引數
let a = Symbol("name")

a // Symbol(name)

a.toString() // "Symbol(name)" 



2、有無引數做對比

①有引數

let a1 = Symbol("name")
let a2 = Symbol("name")

a1 === a2 //false

可以看出a1,a2是Symbol的返回值並且引數相同但它們是不相等的。

②無引數

let a1 = Symbol()
let a2 = Symbol()

a1 === a2 //false

可以看出a1,a2是Symbol的返回值,但它們是不相等的。

3、不能與其他的資料型別進行運算

let s = Symbol("Hi Symbol")

s + "welcome your visit"

此時瀏覽器會報錯TypeError: can't convert symbol to string 意思是將Symbol 值不能與其他型別的值進行運算

4.顯式轉為字串

let s = Symbol("Hello word")

第一種 String(s) //'Symbol("Hello word")'

第二種s.toString()//'Symbol("Hello word")'

5.轉布林型別

let s = Symbol()

Boolean(s) // true

!s //false

6.Symbol.prototype.description

此語法是為剛建立好的Symbol語法新增一個描述。

const s = Symbol("Hello Word")

讀取描述:s.description // "Hello Word"

7.可以當屬性名來使用(它的獨一無二性質,可以防止鍵名被改寫或覆蓋)

let s = Symbol()

//第一種方式

let obj = {}

obj[s] = 'Hello Word';

//第二種方式

let obj = {

  [s]:'Hello Word'

}

//第三種方式

let obj = {}

Object.defineProperty(obj,s,{value:"Hello Word"})

obj[s] // "Hello Word"

8.Symbol.for()Symbol.keyFor()

let a1 =Symbol.for("name")

let a2 =Symbol.for("name")

a1 === a2 //true

兩個相等的原因是Symbol.for()不會每次呼叫就返回一個新的 Symbol 型別的值,是會先檢查給定的key是否已經存在,如果不存在才會新建一個值。

Symbol.keyFor()方法返回一個已登記的 Symbol 型別值的key

let a1 = Symbol.for("name");
Symbol.keyFor(s1) // "name"

let a2 = Symbol("name");
Symbol.keyFor(s2) // undefined