ECMAScript -17 Symbol

Symbol: 用来表示独一无二的值

const s = Symbol()
console.info(s) // >>> Symbol()
console.info(typeof s) // >>> symbol

console.info(
  Symbol() === Symbol() // 永远不会相等
)
console.info(
  Symbol('a') === Symbol('a') // 永远不会相等
)

console.info(Symbol('bar')) // >> Symbol(bar)
console.info(Symbol('baz')) // >> Symbol(baz)
console.info(Symbol('foo')) // >> Symbol(foo)

const obj1 = {}
obj[Symbol()] = '123'
obj[Symbol()] = '456'
console.info(obj1) /// >>> { [Symbol()]: '123', [Symbol()]: '456' }

const obj2 = {
  [Symbol()]: '123',
  [Symbol()]: '456'
}
console.info(obj2) // >>> { [Symbol()]: '123', [Symbol()]: '456' }

应用

  • 私有成员,使用Symbol创建私有成员的属性名
//  a.js ----------------------------
const name = Symbol()
const person = {
  [name]: 'tom',
  say() {
    console.info(this[name])
  },
  getName() {
    return this[name]
  }
}
/**
 * person:
 *  getName: function(),
 *  say: function(),
 *  Symbol(): "tom"
 */

// 外部文件 b.js ----------------------------
console.info(person.getName()) // tom
person.say() // tom

posted @ 2020-08-18 22:10  荣光无限  阅读(67)  评论(0)    收藏  举报