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學習筆記