zoukankan      html  css  js  c++  java
  • es6知识点

    一、let和const

    let:同一作用域里面不能重复定义。没有预解析-在代码块中,只要let定义变量,在之前使用,都是报错。先定义完再使用。for循环,for循环()里面和{}里面的作用域是不同的

    const:定义的变量不能修改,必须有值,不能后赋值,不改变特性例如常量定义的数组仍然可以push

    二、箭头函数和普通函数的区别

    1、箭头函数和普通函数this的指代不同,普通函数的this指代的这个函数的本身,箭头函数不绑定this,会捕获其所在的上下文的this值,作为自己的this值

    2、箭头函数不能作为构造函数使用,没有原型

    3、箭头函数不绑定arguments,取而代之用rest参数...解决(...展开数组,收起成数组,剩余)

    三、新的字符串拼接

    ·string${变量}·

    四、循环

    1、forEach 代表for的普通循环

    let arr=[{'title':"a","name":"b"},{'title':"a","name":"b"},{'title':"a","name":"b"}]
    arr.forEach((item,index.arr)=>{
        console.log(item+index+arr)
    })

    2、map 一般map作为循环数组return一个新数组,没有return效果和forEach一样

    let arr=[{'title':"a","name":"b"},{'title':"a","name":"b"},{'title':"a","name":"b"}]
    let newarr=arr.map((item,index.arr)=>{
        console.log(item+index+arr)
        let json={};
        json.t=item.title
        json.n=item.name
        return json
    })    
    console.log(newarr)

    3、filter 过滤 过滤掉不符合条件的留下符合条件的,并且需要与return配合

    let arr=[{'title':"a","name":"b",'hot':true},{'title':"a","name":"b",'hot':false},{'title':"a","name":"b",hot:false}]
    let newarr=arr.filter((item,index.arr)=>{
        return item.hot==false
    })    
    console.log(newarr)//返回数组[{'title':"a","name":"b",'hot':false},{'title':"a","name":"b",hot:false}]
    

    4、some 查找  数组里面某一个元素符合条件返回true

    let arr=[1,2,3,4,5,6,7,8]
    let boolean=arr.some((item,index,arr)=>{
        return item==2
    })
    console.log(boolean)//true

    5、every 查找  数组里面所有元素符合条件返回true

    let arr=[1,3,5,6,7,9];
    let boolean=arr.every((item,index,val)=>{
       return item%2=1 
    })
    console.log(boolean)//结果false 

    6、reduce  数值传四个参数prev cur index arr (上一个,当前元素,键值,数组) reduceRight 从右到左

    let arr=[1,2,3,4,5,6,7,8,9,10]
    let b=arr.reduce((pre,cur,index,arr)=>{
       return pre+cur 
    })
    console.log(b)//55每次循环相加
    

    7、let ... of (arr.keys()数组的下标 arr.entries()数组的某一项)

    let arr=['apple','orange','banana']
    for(let val of arr ){
    console.log(val)
    }//apple orange banana
    for(let index of arr.keys()){
    console.log(index)
    }//0 1 2
    for(let item of arr.entries()){
    console.log(item)
    }//[0,'apple'] [1,'orange'] [2,'banana']
    for(let [key,val] of arr.entries()){
    console.log(key+val)
    }//0 'apple' 1 'orange' 2 'banana'

    五、数组

    1、Array.from()把类数组转换为数组,转换数组本身会扔出该数组组成新数组(类数组带有length的都可以理解为类数组)

    let json={
    		0:1,
    		1:2,
    		2:3,
    		length:3
    				
    		}
    console.log(Array.from(json))//[1,2,3]
    let json={
    		a:1,
    		b:2,
    		c:3,
    		length:3
    				
    		}
    console.log(Array.from(json))//[undefined,undefined,undefined]
    let json={
    		a:1,
    		b:2,
    		c:3
    				
    		}
    console.log(Array.from(json))//[]
    

    2、Array.of() 把一组值转成数组

    let b=Array.of('apple','orange','banana')
    console.log(b)//['apple','orange','banana']
    

    3、find()寻找第一个符合条件的

    let arr=[0,1,2,4,5]
    let res=arr.find((val,index,arr)=>{
        return val>3
    })
    console.log(res)//4
    

    4、findIndex()寻找第一个符合条件的位置

    let arr=[0,1,2,4,5]
    let res=arr.findIndex((val,index,arr)=>{
        return val>3
    })
    console.log(res)//3
    let arr=[0,1,2,4,5]
    let res=arr.findIndex((val,index,arr)=>{
        return val>5
    })
    console.log(res)//-1
    

    5、fill() 填充file(填充的元素,起始位置,结束位置)

    6、includes,indexOf(可用于字符串数组) includes返回true/false indexOf返回下标没有返回-1

    六、对象

    1、Object.is(a == b)//判断是否相等 肉眼可见的相等 +0==-0返回false NaN==NaN返回true

    2、Object.assign()//合并对象,后面覆盖前面,延伸用法接口请求数据首先默认参数,用户传参数覆盖默认参数

    let obj1={a:1}
    let obj2={b:2}
    let obj3={c:3}
    let obj=Object.assign({},obj1,obj2,obj3)//{a:1,b:2,c:3}
    let obj1={a:1}
    let obj2={b:2}
    let obj3={c:3}

    let obj3={c:4}
    let obj=Object.assign({},obj1,obj2,obj3)//{a:1,b:2,c:4}

    3、Object.keys(),Object.values(),Object.entries() //延伸判断空对象

    let obj=[]
    Object.keys(obj)=[],Object.keys(obj).length==0
    Object.values(obj)=[],Object.keys(obj).length==0
    Object.entries(obj)=[],Object.keys(obj).length==0
    let obj={
      a:1,
      b:2,
      c:3  
    }
    Object.keys(obj)=[a,b,c]
    Object.values(obj)=[1,2,3]
    Object.entries(obj)=[[0:a,1:1]],[0:b,1:2],[0:c,1:3]]

    七、promise 解决异步回调问题

     八、generator函数和symbol generator一般配合yield执行,symbol ES6新增的数据类型用法symbol('xxx') 不能用new来创建代表唯一性

    function * show(){
        yield 'welcome',
        yield 'to';
         return '博客园';  
    }
    let g1=show();
    console.log(g1)//函数对象
    console.log(g1.next());//{value:welcome,done:false} done=false代表没有完事
    console.log(g1.next());//{value:to,done:false} done=false代表没有完事
    console.log(g1.next());//{value:博客园,done:true} done=false代表没有完事
    注:for(let val of g1){
      console.log(val)//welcome/to return是个函数循环不出来
    }

    九、async await 配合使用(await只能放在async函数中,更加语义化,async返回的是一个promise对象,await语句后面promise状态变成reject,整个async函数中断)

    async function fn(){
      await promise.reject('出现问题了')  
      let a=await promise.resolve('success')
      console.log(a)  
    }
    fn.then(res=>{
       console.log(res) 
    }).catch(err=>{
       console.log(err) 
    })//出现问题了  

     如何解决上述async函数中抛出错误影响后续代码?try{}.catch(e){}

    async function fn(){
      try{
        await promise.reject('出现问题了')  
      }catch(e){
        console.log(e)
      }
      
      let a=await promise.resolve('success')
      console.log(a)  
    }
    fn.then(res=>{
       console.log(res) 
    }).catch(err=>{
       console.log(err) 
    })//出现问题了 success
    
    async function fn(){
      
      await promise.reject('出现问题了') .catch(err=>{
        console.log(err)
      })
      
      
      let a=await promise.resolve('success')
      console.log(a)  
    }
    fn.then(res=>{
       console.log(res) 
    }).catch(err=>{
       console.log(err) 
    })//出现问题了 success undefind  

    十、set的用法 set应用场景可以去重,判断set的个数是用size,缺点不兼容低版本系列

    1、add()添加

    2、delete()删除

    3、has()检查是否存在

    4、clear()清空

  • 相关阅读:
    为什么button在设置标题时要用一个方法,而不像lable一样直接用一个属性
    桥接模式(透传模式)和直驱模式
    vb.net版机房收费系统——教你七层架构(三)—外观模式
    Android 4.4 KitKat NotificationManagerService使用具体解释与原理分析(二)__原理分析
    poj-2758 Checking the Text
    一种感悟,为什么努力了确还是死了一地
    一位程序员的6年总结(转)
    主键生成策略
    Linux下的crontab定时执行任务命令详解
    win7 64下安装mysql-python报错的解决办法
  • 原文地址:https://www.cnblogs.com/iwen1992/p/12669038.html
Copyright © 2011-2022 走看看