ES6學習鞏固3

1、set 集合類似一維數組 傳入一維數組初始化一個set集合 'new Set([1,2,3])'

      set 的值可以是非字符串類型 

      有 has() clear() delete() add() forEach()  .size

      forEach() 方法的參數是一個函數 ,函數的參數有三個,前兩個是一樣的,表示迭代的值,'forEach((value,value,set)=>{})'

      set集合的值不能重複 

      通過'arr=[...set]' 展開表達式可以將set集合迭代後打散放到數組中

      weakSet 集合是 Set 集合的子集 只能存對象 是弱引用對象 當其它地方沒有這個對象的引用之後 weakSet 中的這個對象會自動被垃圾回收

      map 集合類似一個二位數組 傳入一個二維數組初始化 一個map集合 'new Map([[key,value],[key,value]])'

      key value 可以是非字符串類型 

      有 has() clear() delete() size forEach() get() set()

      forEach((key,value,map)=>{})

      weakMap集合的鍵必須是對象 這個對象也是弱引用的 當沒有其它引用的時候 這個weakMap中會刪除這個 'key,value' 對 

2、迭代器 就是 用 next() 方法 返回 '{value:xxx,done:true/false}' 的對象 當有下一個值的時候 done爲false 到沒有值了 'done'就爲true 以後再執行 next() 都是 '{value:undefined,done:true}'

      生成器 就是 有'*' 定義的函數 函數體裏面用多個 'yield' 定義分隔 每次迭代器執行的代碼段 'function *fn(){yield 123}'  返回值就是一個迭代器 'xxx = fn();  xxx.next()'

      'yield' 只能在生成器中使用

      可迭代對象就是有實現 Symbol.iterator 屬性的對象 這個 [Symbol.iterator] 的值應該是一個生成器 調用之後返回一個迭代器 給外部使用

      Array 有默認的迭代器 

      'a=[1,2,3]; a[Symbol.iterator]().next() 輸出 '{value:1,done:false}''

      創建可迭代對象 就是實現一下接口 'o={*[Symbol.iterator](){yield 123}}   for(x of o){ console.log(x)}  輸出  123'

      內建迭代器 就是除了默認迭代器[Symbol.iterator] 還創建了別的迭代器 比如 set.keys() map.values() array.entrities() 

       字符串迭代器 是按照字符位置來迭代 額不是碼位 可以正確迭代佔位好幾個碼位的字符 

      NodeList迭代器 document.getElementsByTagName() 的NodeList 可以用 for of 來迭代 

      展開運算符'[...set]' 是根據對象的迭代器來把對象展開的

      迭代器傳參 傳入的參數會替代上一次 'yield 的值' 傳入

      迭代器拋錯 迭代器除了next() 還有 throw() 可以往裏面拋錯誤 然後 生成器能捕獲這個錯誤 來決定下一次迭代什麼

      生成器返回語句 生成器中 用 return  來讓 迭代器的迭代結束 '{value:return的返回值,done:true}'

      委託生成器 就是在生成器中插入別的生成器 串聯在一起 構成迭代器的每一次迭代 'function*a(){yield *b()  yield *c()}'

      異步任務執行 不確定任務什麼時候執行 可以用迭代器來執行 當一次任務執行結束 就 next() 來執行下一個任務

3、類 'class A {constructor(){}} ' 

      表達式 'let A = class B {}' 只能用 A 來創建類 

      類可以做函數的參數 返回值 可以賦值給變量

      類 可以定義訪問器屬性 { get name (){}; set name (){}} 

      類可以使用可計算的成員名稱 { [name](){} }

      類可以定義生成器成員 {*xxx(){yield 123}} 

      類可以定義靜態成員 { static xxx(){} }

      類的繼承 ' class A extends B { constructor(){ super()}}' A 是 B 的派生類 

      派生類可以重寫父類中的方法 派生類可以拷貝父類的靜態成員 

      一個函數表達式只要有 [[constructor]] 就可以被子類繼承 比如 'function xxx (name) { this.name = name}'

      內建對象 Array 可以被繼承 應爲內建對象定義了 [Symbol.species] 屬性 所以 子類的[Symbol.species] 總返回構造函數

      子類還是父類中  原屬性 'new.targte' 始終返回 new 調用的類 可以用來在抽象類中組織抽象類被實例化 

 

      

      

      

      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章