JavaScript 的型別分為兩種:原始資料型別(Primitive Data Types)以及物件型別(Object Types)
原始資料型別包含以下:
String
字串型別Number
數字型別Boolean
布林型別Null
Undefined
Symbol
ES6 Symbols 是 JavaScript 中的一種新資料型別,用於表示唯一的識別符。每個 Symbol 值都是唯一且不可變的,並且可以作為物件屬性的 key 值。也就是說,即使兩個 Symbol 值具有相同的描述(description),兩者也不相等。
我們可以使用 Symbol() 函數來建立一個 Symbol 值,可以帶一個參數,用以描述該 Symbol。
屬性說明
- 非建構函式,不能搭配 new 使用(
new Symbol()
) - 不能使用
for...in
、Object.keys()
等迴圈迭代,必須搭配Object.getOwnPropertySymbols()
方法 - 不能使用點運算子
.
取得屬性值,必須使用中括號[]
- 可以作為唯一 key 使用,避免相同 key 值覆寫的情況
使用方式
Symbol(description) 建立唯一識別
|
Symbol.for(key) 全域存取共用
Symbol.for()
方法建立的 Symbol 會被保存在全域中,接收一個字符串作為參數,這個字符串稱為 Symbol 的 key,如果在全域 Symbol 表中已經存在該 key 對應的 Symbol,則直接回傳此 Symbol;如果不存在則新增一個 Symbol
|
Symbol.keyFor(symbol)
取得 Symbol.for() 的 key 值
|
Object.getOwnPropertySymbols() 迴圈
一般來說,如果物件內有重複 key 值,後者會覆寫前者,見以下範例
|
但如果真的存在相同 key 值,像是相同名稱的學生,可以搭配 symbol 使用
|
搭配 Object.getOwnPropertySymbols
運行迴圈判斷
|
參考文章:
https://ithelp.ithome.com.tw/articles/10220499
https://ithelp.ithome.com.tw/articles/10242050
評論