ES6自我總結筆記(阮一峯ES6入門)

【let和const命令】javascript

1.var的做用域是函數體內,不是塊級做用域java

2.let是更完美的var,let的變量的做用是塊級做用域es6

3.let聲明的全局變量不是全局對象屬性,不能夠經過window.變量名的方式訪問數組

4.let聲明的變量直到控制流到達該變量被定義的代碼行時纔會被裝載,因此在到達以前使用該變量會觸發錯誤數據結構

5.用let重定義變量會拋出一個語法錯誤(SyntaxError)函數

6.const聲明的變量與let聲明的變量相似,它們的不一樣之處在於,const聲明的變量只能夠在聲明時賦值,不可隨意修改,不然會致使SyntaxError(語法錯誤)this

7.const聲明後必需要賦值spa

【變量的解構和賦值】.net

1.對undefined或者null進行解構,會報錯。rest

var [foo] = undefined //報錯
var [foo] = null //報錯

  由於解構只能用於數組和對象,其餘原始的值都會轉換相對應的對象,可是undefined和null不能轉換爲對象,因此報錯。

2.數組結構和對象解構的不一樣:數組變量的取值是按照位置決定的;對象的變量必須與屬性同名才能正確取值

3.JavaScript引擎會將{X}理解成代碼塊

4.變量解構的用途:交換變量的值,從函數返回多個值,函數參數的定義。函數參數的默認值 、遍歷Map結構、輸入模塊的指定方法

 

【set和map數據結構】

1.ES6提供了新的數據結構,相似於數組,可是其成員是惟一的,沒有重複的值

2.set自己是一個構造函數,用來生成set數據結構

3.Set結構不會添加劇復的值

4.向set加入值的時候,不會發生類型轉換,意味着5和「5」是兩個不一樣的值

5.set結構的方法:add(value),delete(value),has(value),clear();

6.Array.from方法能夠將set結構轉換爲數組,提供了一種去除數組中元素重複的方法】

var items = new Set([1,1,1,2,2,3,4]);
var array = Array.form(items);

7.es6的 map,鍵值對,「鍵」的範圍不限於字符串,對象也能夠看成鍵。

8.map也能夠接受一個數組進行初始化

var map =new Map([["name","張三"],["title","Author"]])
map.size//2
map.has("name")//true
map.get("name")//"張三"

10.map的屬性和方法:size、set(key,value)、get(key)、has(key)、delete(key)、clear

11.Map原生提供三個遍歷器:

a.keys():返回鍵名的遍歷器

b.values():返回鍵值的遍歷器

c.entries():返回全部成員的遍歷器

11.map還有一個foreach的方法,與數組的foreach方法相似,也能夠實現遍歷,foreach方法能夠接受第二個參數,用來綁定this

var reporter ={
      report:function(key,value){
      console.log(key,value);
}
};
map.forEach(function(key,value,map){this.report(key,value);},reporter)

  上面的代碼中,forEach方法的回到函數中的this,就是指向reporter的。

12.WeakMAp結構月Map結構基本相似,惟一的卻別是它只接受對象做爲鍵名(null除外),不接受原始的類型值做爲鍵名

13.WeakMap的結構有助於防止內存泄漏,由於當對象被回收後,WeakMap自動移除對應的鍵值對。

14。

【函數的擴展】

1.函數參數的默認值,ES6容許爲函數的參數設置默認值,任何帶有默認值的參數,都被視爲可選參數。不帶默認值的參數,則被視爲必填參數

2.rest參數:...變量名,rest參數以後不能再有其餘參數,不然會報錯

3.擴展運算符:是三個點(...),比如rest參數的逆運算,將一個數組轉換爲用逗號分隔的參數序列。

4.擴展運算符能夠簡化求出一個數組最大元素的寫法

5.箭頭函數:var f =v=>v var f=function(v){return v}

6.若是箭頭函數不須要參數或須要多個參數,就使用一堆圓括號表明參數部分

7.因爲大括號被結束爲代碼塊,所以若是箭頭函數直接返回一個對象,必須在對象外面加上括號

8.箭頭函數有幾個使用注意點:1.函數體內的this對象,綁定定義時所在的對象,而不是使用時所在的對象2.不能夠看成構造函數,也就是說,不可使用new命令,不可使用arguments對象,該對象在函數體內不存在

【Iterator和for ...of循環】

 1.一個對象只要部署了next方法,就被視爲具備iterator接口,就能夠用for...of循環遍歷它的值,數組原生具有iterator接口

 2.js原有的for...in循環,只能得到對象的鍵名,不能直接獲取鍵值。(for...in有一個坑:它會把屬性一塊兒遍歷

var arr=["a",'b','c'];
arr.name="ahhh";
for(var a in arr){
console.log(a);
}
//0
//1
//2
//name
var arr=["a","b","c"];
for(var a of arr){
console.log(a);
}
//a
//b
//c

3.對於Set和Map結構的數據,能夠直接使用for...of循環

4.對於普通的對象,for...of結構不能直接使用,不然會報錯,必須部署了iterator接口才能使用

5.for ...of的使用範圍:數組、相似數組的對象(好比arguments對象,DOM NodeList對象)、Set和Map結構、Generator對象,以及字符串

【對象的擴展】

1.object.is()用來比較兩個值是否嚴格相等。它與嚴格比較運算符(===)的行爲基本一致,不一樣之處只有兩點:一是+0不等於-0,二是NaN等於自身

+0 ===-0//true
NaN === NaN //false

Object.is(=0,-0)//false
Object.is(NaN,NaN)//true

2.Object.assign()、深拷貝(可參考http://blog.csdn.net/waiterwaiter/article/details/50267787)、只對頂層屬性作了賦值,徹底沒有繼續作遞歸之類的把全部下一層的屬性作深拷貝。

3.若是目標對象與源對象有同名屬性,或多個源對象有同名屬性,則後面的屬性會覆蓋前面的屬性。

相關文章
相關標籤/搜索