Symbol

symbol是 ES6 新增的基础类型,用于生成全局唯一不可变的值,用于解决全局变量冲突问题。

// 使用Symbol函数创建实例,参数为实例描述
let s1 = Symbol('foo')
console.log(s1.description); // foo
let s2 = Symbol('foo')
console.log(s1 == s2)// false

// Symbol.for() 会在全局搜索是否已经生成相关描述的变量,如果有直接返回,没有则在全局创建
let s3 = Symbol.for('foo')
let s4 = Symbol.for('foo')
console.log(s3 === s4)// true

// Symbol.keyFor() 获取全局声明变量的描述
console.log(Symbol.keyFor(s2)) // undefined,s2不是全局声明,所以返回undefined
console.log(Symbol.keyFor(s3)) // foo

使用场景

const s1 = Symbol('lee')
const s2 = Symbol('lee')
const grade =  {
  [s1]: {name: 'lee', age: 12},
  [s2]: {name: 'lee', age: 13}
}
console.log(grade)
console.log(grade[s1]) // {name: "lee", age: 12}
console.log(grade[s2]) // {name: "lee", age: 13}

魔术字符串

const ShapeTypes = {
  circle: Symbol('circle'),
  square: Symbol('square')
}

function getArea(type) {
  let area = 0
  switch (type) {
    case ShapeTypes.circle:
      area = 1
      break
    case ShapeTypes.square:
      area = 2
      break
  }
  return area
}
console.log(getArea(ShapeTypes.square)) // 2

results matching ""

    No results matching ""