ES6 筆記 Symbol

Symbol是為了解決屬性名沖突的問題而引入的,想要創建不會沖突的屬性,可以new一個Symbol,每個創建的Symbol是獨一無二的,不會沖突

var mySymbol = Symbol();

obj[mySymbol] = "ok!";  // called symbol-keyed property, guaranteed not to collide
console.log(obj[mySymbol]);  // ok!
  • 可以創建具有descriptionSymbol,description會在toString時打印出來

  • symbol-keyed property不能使用點號引用,需要使用方括號引用。

  • get 和 set symbol keyed property: element[Symbol]
    檢查有沒有屬性: if (Symbol in element)
    刪除屬性: delete element[Symbol]

  • Symbol 離開作用域,這個屬性就沒法引用了

  • Object.getOwnPropertyNames,Object.keys(obj)不會返回Symbol keyed property。 Object.getOwnPropertySymbols(obj)返回symbol-keyed property。

Symbol是單獨的類型,Symbol不會自動轉換成字符串,必須顯示調用toString()

> typeof Symbol()
"symbol"

有三類Symbol

  • Symbol創建的新的Symbol

  • Symbol.for(string) 重復返回統一Symbol

  • 標準里定義的Symbol,比如Symbol.iterator

for (var item of myArray) 就是調用 myArray[Symbol.iterator]()返回一個迭代器

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 回憶一下JS中的原始類型:字符串型、數字型、布爾型、null和undefined。 ES6中引入了第6種原始類型:...
    ___Jing___閱讀 8,704評論 2 10
  • 前面的話 ES5中包含5種原始類型:字符串、數字、布爾值、null和undefined。ES6引入了第6種原始類型...
    CodeMT閱讀 698評論 0 1
  • 概述 ES5的對象屬性名都是字符串,這容易造成屬性名的沖突。比如,你使用了一個他人提供的對象,但又想為這個對象添加...
    oWSQo閱讀 538評論 1 3
  • 基本概念 Symbol:表示獨一無二的值,屬于類字符串數據類型,本質上可以當字符串來用。 基本用法 Symbol是...
    前白閱讀 374評論 0 1
  • { "Unterminated string literal.": "未終止的字符串文本。", "Identifi...
    Elbert_Z閱讀 10,886評論 0 2