ES6 學習筆記(一)let,const和解構賦值

let和constjavascript

let和const是es6新增的兩個變量聲明關鍵字,與var的不一樣點在於:java

(1)let和const都是塊級做用域,在{}內有效,這點在for循環中很是有用,只在循環體內有效。var爲函數做用域。es6

(2)使用let和const聲明的變量,不存在變量提高,必須先聲明再使用。使用var聲明的變量能夠先使用再定義。數組

(3)不可重複聲明。一旦用var,let或者const聲明過的變量,再次用let或者const聲明時會報錯,函數的參數名若是用let或者const在函數體內聲明同名的參數時,也會報錯。函數

const特殊要點:對象

(1)const顧名思義常量,但這個常量與高級語言的常量有所不一樣,這裏的常量指的是在定義就肯定其值,而且這個值只讀,不能夠修改;高級語言的常量更狹隘一點;ip

(2)使用const聲明的變量,一旦聲明須要當即初始化,只聲明的變量沒法用const,const a; 編譯會報錯;而且一旦初始化,就不能改變。作用域

(3)const用於定義一個複合型對象或者數組時,只是對對象或者數組自己不可賦值,但依然能夠爲對象添加屬性或者爲數組push元素。字符串

解構賦值get

解構是按照必定的模式,從數組和對象中提取值,對變量進行賦值,解構表達式的左側是通常[]或者{}。當解構表達式的左側是[]時,右側也必須是對應的具備可遍歷屬性的對象,所以能夠是[],map或者string;當解構表達式的左側爲{}時,javascript解析器會先將右側的值轉換爲對象,而後從轉換的對象獲取對應的屬性值。總之,解構一個很重要的原則就是「模式匹配」,根據左側是[]或者{},對右側進行轉換,若是轉換後,兩側模式匹配,則進行解構賦值,不然報錯。

同時,解構時容許設置默認值,但這裏的執行順序是:先解構,若是解構獲得的值爲非undefined,則變量值=解構的值,默認賦值表達式不執行;只有當解構獲得的值嚴格等於undefined時,纔會執行默認賦值表達式,不然默認賦值表達式是不執行的。

1.數組解構

數組的解構是按照變量的順序進行賦值的,所以變量的值與數組的順序息息相關,不一樣的順序,解構獲得的值也不一樣。

2.對象解構

對象解構與數組解構不一樣,對象解構與元素的順序無關,對象解構的主要依據是對象的屬性,對象的屬性沒有次序,變量必須與屬性同名,才能取到正確的值。

3.函數參數解構

函數參數解構實際上是數組解構或者對象解構的一種應用,在es6中能夠爲函數參數指定默認值,這點和解構一塊兒使用,對於參數賦值很是實用。函數參數的解構一樣要求模式匹配,函數定義時的參數的數據類型和調用時傳入的參數類型保持一致。

另外:對於已經聲明的變量進行解構賦值時,要很是當心。下面的示例中,首先用let對變量進行了聲明,因爲let和const聲明的變量不能重複聲明,在經過解構表達式賦值時,javascript解析器會將行首的{}解析爲代碼塊,報語法錯誤。所以在行首加(),將其強制轉化爲表達式執行。

4.字符串的解構賦值

字符串也能夠進行解構賦值,由於字符串能夠轉化爲一個具備相似數組的對象。

5.數字和布爾值的解構賦值

解構賦值時,若是等號右邊是數值和布爾值,則會先轉爲對象。解構賦值的規則是,只要等號右邊的值不是對象,就先將其轉爲對象。因爲undefined和null沒法轉爲對象,因此對它們進行解構賦值,都會報錯。

參考文獻:http://es6.ruanyifeng.com/#do...

     http://es6.ruanyifeng.com/#do...

相關文章
相關標籤/搜索