symbol是es6中一種新增加的資料型別,它表示獨一無二的值。es5中我們把資料型別分為基本資料型別(字串、數字、布林、undefined、null)和引用資料型別(object),在es6中新增的symbol資料型別劃分到基本資料型別
為什麼會有這樣一種資料型別呢?
//別人給了你乙個定義好的物件
var obj =
}//你拿到物件想給這物件新增新的屬性和方法的時候,可能會建立出乙個name屬性和showname方法
obj.name = "nodeing"
obj.showname = function()
//這個時候,新增加的方法和屬性就會去把原有的方法覆蓋,這樣就產生了衝突
由於物件的屬性和方法是字串組成,這樣新增方法和屬性的時候有可能衝突,在es6中就新增了一種資料型別,表示獨一無二的值
通過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 name = symbol("name");
let show = symbol("show");
let obj =
};//取值
console.log(obj[name]);
//呼叫方法
obj[show]()
注意1: 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 = ;
//取值
console.log(obj[symbol("name")]);
注意6: symbol沒有辦法被for in迴圈遍歷
let name = symbol('name')
let age = symbol('age')
let obj = ;
for(let attr in obj)
可以使用object.getownpropertysymbols檢視物件上所有的symbol屬性
console.log(object.getownpropertysymbols(obj))
es6 最佳入門實踐 12
在es5中,物件導向我們通常寫成這樣 function person name,age person.prototype.showname function let p new person xiaoqiang 10 p.showname 上面這種寫法與傳統的物件導向寫法有很大的不同,讓學習過其他物...
es6 最佳入門實踐 10
generator函式是es6提供的一種非同步程式設計解決方案。在它的內部封裝了多個狀態,因此,又可以理解為一種狀態機,執行generator函式後返回乙個迭代器物件,使用這個迭代器物件可以遍歷出generator函式內部的狀態 generator函式和傳統函式的不同點有 1 函式定義的時候,fun...
es6 最佳入門實踐 8
要理解非同步,首先,從同步 開始說 alert 1 alert 2 像上面的 執行順序是從上到下,先後彈出1和2,這種 叫做同步 alert 0 settimeout function 2000 settimeout function 1000 alert 3 上面 的彈出順序是 0 3 2 1 像...