1. 程式人生 > >Es6學習筆記

Es6學習筆記

js es6

1、關於let

-- let變量必須先聲明,後使用

-- 在同一作用域,let不能重復聲明

-- let增加了塊級作用域,從而從某種意義上取消了自我執行函數


2、關於const

-- const只聲明一個常量,一旦聲明,就不能改變(本質是引用地址不能改變)

-- const變量必須先聲明,後使用


3、變量結構賦值

-- 解構賦值允許指定默認值,經常在函數傳參時使用(只要模式匹配,部分參數可用省略)

-- 交換變量的值

-- 解構賦值對提取JSON對象中的數據,尤其有用

-- 遍歷Map結構結合for……of……


4、關於Array.from

-- 方便將類似數組對象和可遍歷的對象(iterable)(如documenet.getElementsByAagNames獲得的對象)轉換成數組


5、關於Array.of

-- 方便將一組值轉換成數組,基本上可以用來替代Array()new Array()


6、關於數組實例的copyWithin

-- 數組實例的copyWithin方法,在當前數組內部,將指定位置的成員復制到其他位置(會覆蓋原有成員),然後返回當前數組。


7、關於find()和findIndex()

--find():數組實例的find方法,用於找出第一個符合條件的數組成員。

--findIndex():返回第一個符合條件的數組成員index位置


8、數組的fill(),entries(),keys(),values()

-- fill():fill方法使用給定值,填充一個數組。fill

方法用於空數組的初始化非常方便.

-- entries()keys()values()——用於遍歷數組。keys()是對鍵名的遍歷、values()是對鍵值的遍歷,entries()是對鍵值對的遍歷。


9、數組的includes()

-- 返回一個布爾值,表示某個數組是否包含給定的值,取代之前的indexOf()方法,更加直觀。

-- Map和Set數據結構有一個has方法,需要註意與includes區分。Map結構的has方法,是用來查找鍵名的,Set結構的has方法,是用來查找值的。


10、關於數組的空位

-- ES6則是明確將空位轉為undefined。擴展運算符(...)也會將空位轉為undefined


11、關於函數的擴展

-- 通常情況下,定義了默認值的參數,應該是函數的尾參數。如果非尾部的參數設置默認值,實際上這個參數是沒法省略的。

-- 函數的length屬性。函數的length屬性,將返回沒有指定默認值的參數個數。

-- 作用域。一旦設置了參數的默認值,函數進行聲明初始化時,參數會形成一個單獨的作用域(context)。

--可以將參數默認值設為undefined,表明這個參數是可以省略的。

-- rest參數. rest 參數(形式為“...變量名”),用於獲取函數的多余參數,這樣就不需要使用arguments對象了。

--擴展運算符。擴展運算符(spread)是三個點(...)。它好比 rest 參數的逆運算,將一個數組轉為用逗號分隔的參數序列。由於擴展運算符可以展開數組,所以不再需要apply方法,將數組轉為函數的參數了。

*擴展運算符的運用

(1)合並數組。[...arr1, ...arr2, ...arr3].

(2)擴展運算符可以與解構賦值結合起來,用於生成數組。

(3)如果將擴展運算符用於數組賦值,只能放在參數的最後一位,否則會報錯。

a = list[0], rest = list.slice(1) // ES5 [a, ...rest] = list // ES6

(4)擴展運算符還可以將字符串和Iterator接口的對象轉為真正的數組

[...‘hello‘] //["h", "e", "l", "l", "o"]

-- 箭頭函數

(1)函數體內的this對象,就是定義時所在的對象,而不是使用時所在的對象。

(2)不可以當作構造函數,也就是說,不可以使用new命令,否則會拋出一個錯誤。

(3)不可以使用arguments對象,該對象在函數體內不存在。如果要用,可以用Rest參數代替。

(4)不可以使用yield命令,因此箭頭函數不能用作Generator函數。

(5)箭頭函數可以綁定this對象,大大減少了顯式綁定this對象的寫法,雙冒號

-- 尾調用優化(待學習)


12、關於對象的擴展

-- ES6 允許直接寫入變量和函數,作為對象的屬性和方法。這時,屬性名為變量名。

-- ES6 可用表達式作為屬性名。obj[‘a‘ + ‘bc‘] = 123; 等同於 obj[abc]=123;

-- Object.is()。Object.is就是部署這個算法的新方法。它用來比較兩個值是否嚴格相等,與嚴格比較運算符(===)的行為基本一致。不同之處只有兩個:一是+0不等於-0,二是NaN等於自身。

-- Object.assign()。Object.assign方法用於對象的合並,將源對象(source)的所有可枚舉屬性,復制到目標對象(target)。如果具有相同屬性,則會覆蓋原屬性。Object.assign方法實行的是淺拷貝,而不是深拷貝。也就是說,如果源對象某個屬性的值是對象,那麽目標對象拷貝得到的是這個對象的引用。

-- 屬性的可枚舉性。(見文檔)

-- 屬性的遍歷(見文檔)

-- 對象的擴展運算符。擴展運算符(...)用於取出參數對象的所有可遍歷屬性,拷貝到當前對象之中。這等同於使用Object.assign方法。






Es6學習筆記