[JS] Symbol
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol
Symbol 是 ES6 新增的型別。
The Symbol type is the set of all non-String values that may be used as the key of an Object property.
Each possible Symbol value is unique and immutable.
Each Symbol value immutably holds an associated value called [[Description]] that is either undefined or a String value. (p.73)
由此我們可以知道:
- Symbol 是拿來當作物件的 key 使用的
- Symbol 是除了 string 以外唯一可以被用來當作 object 的 key 的東西
- 每一個 Symbol 的值都是獨一無二的;你無法建立兩個一樣的 Symbol
建立 Symbol
Every
Symbol()call is guaranteed to return a unique Symbol.
使用 Symbol() 建立一個獨一無二的 Symbol:
const sym1 = Symbol();
const sym2 = Symbol('foo');
const sym3 = Symbol('foo');
console.log(sym2 === sym3); // false,每個 Symbol 都是獨一無二的
console.log(sym2.description); // foo,用這樣來取得敘述
const obj = {};
obj[sym2] = 'hello'; // 可以當成 key 使用
console.log(obj[sym2]); // hello
Symbol 獨一無二的特性讓它在被當成物件的 key 使用時,不需要擔心會與其他的 key 衝突。