es6 Symbol筆記

symbol一個獨一無二的值

let s = Symbol('foo')
let ss = Symbol('foo')
s === ss  // false
  • 將symbo做爲屬性名或在函數名,須要用[]
let name = Symbol('name');
let fun = Symbol('fun');
let obj =  {
       [name]:zhan
       [fun](){
       // doSomething
               }
           }
  • Object.getOwnPropertySymbols獲取該Symbol屬性html

  • 消除魔術字符創angular2

const shapeType = {
  triangle: Symbol('triangle'),
  other: Symbol('other')
};

function getArea(shape, options) {
  let area = 0;
  switch (shape) {
    case shapeType.triangle:
      area = .5 * options.width * options.height;
      break;
      case shapeType.other:
      // do something
      break;
  }
  return area;
}

getArea(shapeType.triangle, { width: 100, height: 100 })

Symbol.for()、 Symbol.keyFor()

  • Symbol.for()與Symbol()這兩種寫法,都會生成新的 Symbol。它們的區別是, 前者會被登記在全局環境中供搜索,後者不會。Symbol.for()不會每次調用就返回一個新的 Symbol 類型的值, 而是會先檢查給定的key是否已經存在,若是不存在纔會新建一個值。好比,若是你調用Symbol.for("cat")30 次, 每次都會返回同一個 Symbol 值,可是調用Symbol("cat")30 次,會返回 30 個不一樣的 Symbol 值。
let s1 = Symbol.for('foo');
let s2 = Symbol.for('foo');

s1 === s2
  • Symbol.keyFor方法返回一個已登記的 Symbol 類型值的key。
let s1 = Symbol.for("foo");
Symbol.keyFor(s1) // "foo"

let s2 = Symbol("foo");
Symbol.keyFor(s2) // undefine   變量s2屬於未登記的 Symbol 值,因此返回undefined
相關文章
相關標籤/搜索