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