Symbol
let s1 = Symbol('foo');
let s2 = Symbol('bar');
s1 // Symbol(foo)
s2 // Symbol(bar)
s1.toString() // "Symbol(foo)"
s2.toString() // "Symbol(bar)"
ES6 引入了一種新的原始資料型別Symbol,表示獨一無二的值。
// 沒有引數的情況
let s1 = Symbol();
let s2 = Symbol();
s1 === s2 // false
// 有引數的情況
let s3 = Symbol('foo');
let s4 = Symbol('foo');
s3 === s4 // false
應用案例
const log = {};
log.levels = {
DEBUG: Symbol('debug'),
INFO: Symbol('info'),
WARN: Symbol('warn')
};
console.log(log.levels.DEBUG, 'debug message');
console.log(log.levels.INFO, 'info message');
const obj = {};
let a = Symbol('a');
let b = Symbol('b');
obj[a] = 'Hello';
obj[b] = 'World';
const objectSymbols = Object.getOwnPropertySymbols(obj);
objectSymbols
// [Symbol(a), Symbol(b)]
屬性名的遍歷。
有時,我們希望重新使用同一個 Symbol 值,Symbol.for方法可以做到這一點。
let s1 = Symbol.for('foo');
let s2 = Symbol.for('foo');
s1 === s2 // true
Symbol.for("bar") === Symbol.for("bar")
// true
Symbol("bar") === Symbol("bar")
// false