解構:ES6允許按照一定模式,從數組和對象中提取值,對變數進行賦值。 對象的解構與數組有一個重要的不同。數組的元素是按次序排列的,變數的取值由他的位置決定;而對象的屬性沒有次序,變數必須與屬性同名,才能取到正確的值。 變數解構賦值的用途:交換變數的值,從函數返回多個值,函數參數的定義,提取JSON數 ...
解構:ES6允許按照一定模式,從數組和對象中提取值,對變數進行賦值。
對象的解構與數組有一個重要的不同。數組的元素是按次序排列的,變數的取值由他的位置決定;而對象的屬性沒有次序,變數必須與屬性同名,才能取到正確的值。
變數解構賦值的用途:交換變數的值,從函數返回多個值,函數參數的定義,提取JSON數據,函數參數的預設值,遍歷map解構,輸入模塊的指定方法。
ES5中的數據結構,主要是用Array和Object。在ES6中主要新增了set和map數據結構。
能使用map的優先使用,不使用數組,考慮數據的唯一性,考慮使用set,不使用object。
Symbol:功能類似於一種標識唯一性的ID。通常情況下,我們可以通過調用symbol()函數來創建一個Symbol實例。每個symbol實例都是唯一的。當你比較兩個Symbol實例的時候,將會返回false。
Symbol的用途:使用symbol來作為對象屬性名,使用symbol來定義常量,使用symbol來定義類的私有屬性和方法。
註冊和獲取全局Symbol
通常情況下,我們在一個瀏覽器視窗中,使用symbol()函數定義和Symbol實例就足夠了。但是,如果你的應用涉及到多個window(最典型的就是頁面中使用iframe),並需要這些window中使用的某些Symbol是同一個,那就不能使用Symbol()函數了,因為用它在不同window中創建的Symbol實例總是唯一的,而我們需要的是在所有這些window環境下保持一個共用的Symbol。這種情況下,我們就需要使用另一個API來創建或獲取Symbol,那就是symbol.for(),它可以註冊或獲取一個window間全局的Symbol實例;
參考網址:https://www.jianshu.com/p/f40a77bbd74e
去除數組的重覆成員:[...new Set(array)]
去除字元串裡面的重覆字元:[...new Set('ababbc')].join('')
Array.from可以將set結構轉為數組:const items = new Set([1, 2, 3, 4, 5]); const array = Array.from(items);
這就提供了去除數組重覆成員的另一種方法。 function dedupe(array) { return Array.from(new Set(array)); } dedupe([1, 1, 2, 3]) // [1, 2, 3]
Set.prototype.keys():返回鍵名的遍歷器
Set.prototype.values():返回鍵值的遍歷器
Set.prototype.entries():返回鍵值對的遍歷器
Set.prototype.forEach():使用回調函數遍歷每個成員
對象的擴展運算符:用於取出參數對象中的所有可遍歷屬性,拷貝到當前對象之中。
如果擴展運算符用於數組賦值,只能放在參數的最後一位,否則會報錯。
擴展運算符還可以將字元串轉為真正的數組,
[...'hello'] // [ "h", "e", "l", "l", "o" ]
任何Iterator介面的對象,都可以用擴展運算符轉為真正的數組。
擴展運算符(spread)是三個點(…)。它好比rest參數的逆運算,將一個數組轉為用逗號分隔的參數序列。
擴展運算符的應用:
1:合併數組2:與解構賦值結合使用