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()清空

 

posted @ 2020-04-09 19:31  iwen1992  阅读(135)  评论(0编辑  收藏  举报