您好,登錄后才能下訂單哦!
這篇文章主要介紹了es6中的symbol如何用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇es6中的symbol如何用文章都會有所收獲,下面我們一起來看看吧。
在es6中,Symbol可用于作為屬性名、定義變量或者常量,表示獨一無二的值,是es6中新增的數據類型,通過Symbol聲明的兩個變量永遠不可能相等,語法為“const name=Symbol("value")”。
本教程操作環境:windows10系統、ECMAScript 6.0版、Dell G3電腦。
什么是Symbol?
Symbol是es6中一種新增加的數據類型,它表示獨一無二的值。es5中我們把數據類型分為基本數據類型(字符串、數字、布爾、undefined、null)和引用數據類型(Object),在es6中新增的Symbol數據類型劃分到基本數據類型
為什么會有這樣一種數據類型呢?
//別人給了你一個定義好的對象 var obj = { name: "xiaoqiang", showName: function(){alert(1)} } //你拿到對象想給這對象添加新的屬性和方法的時候,可能會創建出一個name屬性和showName方法 obj.name = "nodeing" obj.showName = function(){alert(2)} //這個時候,新增加的方法和屬性就會去把原有的方法覆蓋,這樣就產生了沖突
由于對象的屬性和方法是字符串組成,這樣新增方法和屬性的時候有可能沖突,在es6中就新增了一種數據類型,表示獨一無二的值
通過Symbol函數可以創建一個獨一無二的值,每一次執行Symbol函數的時候返回的都是一個對象
let s1 = Symbol() let s2 = Symbol() console.log(s1 === s2) //false 說明創建出來的s1和s2 并不是相同的 console.log(s1, s2); //Symbol() Symbol()
上述代碼中,打印出來的值都是Symbol() , 怎樣才能區分誰是s1,誰是s2呢?我們可以通過傳參的形式來解決
//傳入的參數就是對當前Symbol的描述,用來區分Symbol let s1 = Symbol("s1") let s2 = Symbol("s2") console.log(s1, s2); //Symbol(s1) Symbol(s2)
Symbol通常用于設置對象的屬性名或者方法,防止新加入的屬性或者方法與原來屬性或者方法沖突
let name = Symbol("name"); let show = Symbol("show"); let obj = { //設置屬性 [name]: 'xiaoqiang', [show](){alert(1)} }; //取值 console.log(obj[name]); //調用方法 obj[show]()
這里要注意的是name的值必須是在[]中表示是可以改變的是一個變量
注意1: Symbol里面的參數僅僅是對Symbol的描述,沒有其他意義,因此,即使描述相同,Symbol也是不同的
這里可以猜測Symbol這個函數的返回值是一個對象
console.log(Symbol("nodeing") === Symbol("nodeing")) //false
注意2:Symbol函數不能使用New關鍵字調用
let s1 = new Symbol(); //報錯
注意3: Symbol類型在做類型轉換的時候不能轉成數字
let s1 = Symbol("s1"); console.log(String(s1)); //Symbol(s1) console.log(Boolean(s1)); //true console.log(Number(s1)) //報錯
注意4: Symbol不能做任何運算(可能是返回值不可以運算)
console.log(Symbol("s1") + "nodeing") //報錯 console.log(Symbol("s1") - 100) //報錯
注意5: Symbol在作為對象屬性或者方法的時候,如果不賦值給一個變量的話,沒有辦法取值
let obj = { //設置屬性 [Symbol("name")]: 'xiaoqiang' }; //取值 console.log(obj[Symbol("name")]);
注意6: Symbol沒有辦法被for in循環遍歷
let name = Symbol('name') let age = Symbol('age') let obj = { a: 1, b: 2, [name]: 'xiaoqiang', [age]: 18 }; for(let attr in obj){ console.log(attr,obj[attr]) //a b }
可以使用Object.getOwnPropertySymbols查看對象上所有的symbol屬性
console.log(Object.getOwnPropertySymbols(obj))
關于“es6中的symbol如何用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“es6中的symbol如何用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。