Symbol type
物件 key 只能是 string or symbol 2 種類型
Symbols
symbol 代表唯一的值。
// id is a new symbol
let id = Symbol();
// id is a symbol with the description "id" for debug purpose
let id = Symbol("id");
// same description but different value
let id1 = Symbol("id");
let id2 = Symbol("id");
alert(id1 == id2); // falseSymbols don’t auto-convert to a string
JavaScript 大多數的值可以自動轉換成 string 但 symbol 無法自動轉換。
let id = Symbol("id");
alert(id); // TypeError: Cannot convert a Symbol value to a string
// convert to string
let id = Symbol("id");
alert(id.toString()); // Symbol(id), now it works
// only get description
let id = Symbol("id");
alert(id.description); // id“Hidden” properties
symbol 可以為物件創造隱藏的屬性,程式碼的其他部份不容易取得或改寫。
Symbols in a literal
使用 symbol 作為 key 值,要加上 [ ] 因為它是一個變數。
Symbols are skipped by for…in
symbol 不算在物件迴圈內 for ( in )。
Global symbols
symbol 通常是唯一的值,但如果想要同樣的 symbol 可以用 Symbol.for(key) 設定全域 symbol registry。
Symbol.keyFor
Symbol.keyFor(sym) 返回全域 symbol 的 key名稱。
System symbols
Symbol.hasInstanceSymbol.isConcatSpreadableSymbol.iteratorSymbol.toPrimitive…and so on.
Last updated
Was this helpful?