es6 最佳入門實踐 6

2022-08-19 19:06:10 字數 2149 閱讀 1001

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 像...