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 调用的类 可以用来在抽象类中组织抽象类被实例化 

 

      

      

      

      

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