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

浙公网安备 33010602011771号