js第五天学习整理(es6)

167 阅读3分钟

Generator 函数

        1、es6解决异步编程的方案之一
        2、generator 函数是一个状态机,内部封装了不同状态的数据
        3、用于生成遍历器对象
        4、可暂停函数(惰性求值),yield可暂停,next方法可以启动,每次返回的是yield 后
        表达式的结果,
            特点:function 与函数名之间有一个 *
            内部用yield表达式来定义不同的状态(类似于next需要遍历的对象)
            
            function * generatorExample(){
                let result = yield 'hello'   //状态为hello  指定返回值 result 输出为undefined
                yield 'generator' //状态为generator 
                
            }
            3、generator 函数返回的是指针对象,而不会指向函数内部的逻辑
            4、调用next方法才会执行函数内部的逻辑 =>遇见 yield就会停止,
            返回:{value:yield后面的表达式结果/undefined done}
            5、再次调用next方法会从上一次的停止的yield开始执行,知道最后
            6yield语句最后执行结果返回通常为undefined 当调用next方法时,
             传参内容会作为启动时yield语句的返回值(就是yield 后的语句会作为返回值返回=>语句执行返回)
             
             
             eg:
                 function * myGenerator(){
                        console.log('函数开始执行')
                        yield:'第一个yield被执行了'
                      
                        next后就停在这条语句=>let result = yield 'hello'
                        
                         console.log(result)  //yield 默认返回的就是 => undefined
                         (next函数会作为上一次暂停的yield语句开始启动,为启动时的yield语句指定返回值的属性名)
                         yield:'第二次调用可以传入next()参数 作为result的属性名'
                         =>next(reslutName)  //resultNmae:'hello'
                        
                 }
                 let mg = Generator()  //返回指针对象
                 //并没有执行 =>console.log('函数开始执行')
                 
                 console.log(mg.next());    //函数开始执行  + 第一个yield被执行了
                 console.log(mg.next());    //执行到一下一个yield属性停止
                 console.log(mg.next());    //执行完最后一个yield
                 console.log(mg.next());    //再次执行next 函数返回 value:undefined  
                 done:true
                  
             

class:

          1、通过calss定义类/实现类的继承==>面向对象编程
          2、在类中通过constructor定义构造函数
          3、通过new来创建类的实例
          4、通过extends来时先类的继承
          5、通过super调用父类的钩爪方法
          6、重写父类的方法,满足自身的需求(父类向上抽出的公共类型=>extend时为了更详细描述对象)
          
          class myClass{
                  //类的构造方法
                  constructor(name,age){
                      this.name= name;
                      this.age = age;
                  }
                  //类的一般方法
                  getName(){          //使用class声明必须使用 函数的简写方式(存放在原型)
                      console.log(this.name) //方法添加的到的时原型上,this(谁调用this就指向谁)
                  }
          }
          
          let person = new myClass('tianze',18);
          
            person.getName() // tianze 
            
            //继承
            
            class stdent extends Myclass{
                  constructor(name,age,sex){   //==>构造函数
                      super(name,age)  //调用父类的构造方法
                      this.sex = sex;
                  }
            }
            
            let student = new student('tianze1',19,'男')
            student.showName()//tianze1
            

字符串的扩展:

         includes(str)     //判断是否包含字符串      =>返回Boolean
         startWith(str)    //判断是否以指定字符串开头=>返回Boolean
         endWith(str)      //判断是否以指定字符串结尾=>返回Boolean
         repeat(str)       //重复指定次数           =>返回Boolean
         

数值的扩展:

          二进制、八进制的表示       二进制用0b   八进制用0o
          Number.isFinite(i)        判断是否有最大的数
          Number.isNaN(i)           判断是否是NaN
          Namber.isInteger(i)       判断是否是整数
          Number.parseInt(str)      将字符串转化为对应的数值
          Math.trunc(i)             直接去除小数部分