10Symbol

概述

  1. Symbol 是一種新的數(shù)據(jù)類型
  2. nullundefined 等六種類型并列。typeof的結果是symbol
  3. 使用Symbol()創(chuàng)建的值,獨一無二,與標識相同的symbol值也不同,沒有登記機制
  4. 不能與其他類型進行運算,拼接也不行
  5. 顯式轉化成字符串
  6. 可以轉化成布爾類型
  7. 不可以轉化成數(shù)值類型

作為屬性名的Symbol

var mySymbol = Symbol();
var a = {
    [mySymbol] : 'hello!'
}
// 只能用這種方式
a[mySymbol]

消除魔術字符串

魔術字符串,指的是在代碼中多次出現(xiàn),并且與代碼形成強耦合的具體字符串或者數(shù)值

  1. 其實這個案例是作為屬性值的Symbol
const shapgeType = {
    triangle: Symbol()
};
function () {
    // 只要 shapgeType 有屬性即可,不需要屬性值
}

屬性名的遍歷

  1. Symbol作為屬性名,不會出現(xiàn)在
  • for in
  • for of
  • object.keys()
  • object.getOwnPropertyNames()
  • JSON.stringify()
  1. 可以通過以下方法獲取
  • object.getOwnPropertySymbols(),返回一個數(shù)組
  • Reflect.ownKeys可以返回所有里類型的鍵名,包含常規(guī)鍵名和Symbol鍵名

Symbol.for()Symbol.keyFor()

  1. Symbol.for()相當于進行了登記
  2. Symbol.keyFor()可以找到登記的Symbol
  3. 登記的Symbol是全局環(huán)境的,跨越iframe
// 不登記的情況
var s1 = Symbol('hi');
var s2 = Symbol('hi');
s1 === s2; // false

// 登記的情況
var s1 = Symbol.for('hi');
var s2 = Symbol.for('hi');
s1 === s2; // true

內置的 Symbol

ES6 內置了11個Symbol值,可以與一些方法結合使用。

  1. Symbol.hasInstanceinstanceof
  2. Symbol.isConcatSpreadable 和 數(shù)組的concat方法
  3. Symbol.matchstr.match()
  4. Symbol.iterator指向對象的默認遍歷器方法
  5. 還有很多
// 對象進行 for of 循環(huán)時,會調用 Symbol.iterator 方法
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1.概述 ES5的對象屬性名都是字符串,這容易造成屬性名的沖突。比如,你使用了一個他人提供的對象,但又想為這個對象...
    趙然228閱讀 881評論 2 10
  • 本人是android開發(fā)的,由于最近React Native的火熱,再加上自己完全不懂JS的語法,俗話說的好"落后...
    Bui_vlee閱讀 354評論 0 0
  • ES6 引入了一種新的原始數(shù)據(jù)類型Symbol,表示獨一無二的值。它是JavaScript語言的第七種數(shù)據(jù)類型,前...
    語目閱讀 4,022評論 0 3
  • 我想知道弄丟朋友的到底是什么,因為不想再失去任何一個。 從小到大,每學期每年我們都會遇到新的同學,都會交到新的朋友...
    木木青南閱讀 457評論 0 1
  • “洗腦”二字最近能是我聽得最多的詞。“你已被洗腦”“看那么多那些性格書,有什么用,小心被樂嘉洗腦了”“還花錢去聽...
    承思而行閱讀 280評論 0 1

友情鏈接更多精彩內容