letvarconstdifferencevar1.var可以重复声明2.作用域:全局作用域和函数作用域3.会被预解析(提前声明变量)let1。sameScope不能重复声明2.作用域:全局作用域和块级作用域3.没有预解析const1。常量不能重新赋值2.不能重复声明3.块级作用域4.没有预解析块级{}中letconst声明的变量和常量只能在{}内部使用,不能在{}外部使用解构对象声明的变量名必须和对象内部的名字一致letobj={a:1,b:2}let{a,b}=obj;//a:1,b:2数组letarr=["a","b","c"];let[e,f]=arr;//e:a,f:b/*交换a的值b*/leta=0;letb=1;[a,b]=[b,a];展开运算符数组letarr=[1,2,3,4];设arr1=["a","b",...arr,"c","d"];//["a","b",1,2,3,4,"c","d"]//剩余参数let[a,b,...c]=arr;console.log(a,b,c);//a:1,b:2,c:[3,4]objectlerobj={a:1,b:2};让obj1={...obj,c:3,d:4}console.log(obj1);//{a:1,b:2,c:3,d:4}//剩余参数let{a,b,...c}=obj1;console.log(a,b,c);//12{c:3,d:4}letobj={a:1,b:2}/*情况一:修改obj1会影响obj*/letobj1=obj;obj1.a=10;console.日志(对象);//{a:10,b:2}/*情况2:修改obj1不会影响obj*/letobj1={...obj};obj1.a=10;console.log(obj);//{a:1,b:2}set构造函数用于构建某类对象——对象实例化方法:size()clear()delete()add()has()letarr=[2,1,2,1,3,'b',2,4,5,6,1];lets=newSet(arr);console.log(s);//{2,1,3,4,5,6}console.log(s.size());//大小值的个数console.log(s.clear());//清除所有值console.log(s.delete('b'));//删除一项内容s.add(5).add(6).add(7);//添加一条内容console.log(s.has('b'));//是否包含某个itemMap方法:clear()delete()get()has()set()letarr=[["a",1],["c",2],["c",3],]letm=newMap(arr);console.log(m);//{"a"=>1,"b"=>2,"c"=>3}console.log(m.clear());//清除所有值console.log(m.delete("a"));//删除一个值console.log(m.get("a"));//获取一个值console.log(m.has("a"));//是否包含值m.set("a",2).set("d",4);//{"a"=>2,"b"=>2,"c"=>3,"d"=>4}新函数箭头函数写法:letfn=num=>num*2;//形参=>返回值letfn=(num1,num2)=>num1*num2;//(formalparameter,formalparameter)=>返回值letfn=()=>"returnvalue";//()=>返回值letfn=()=>{console.log('执行语句');}fn();//()=>{执行语句}可变参数函数fn(){console.log(arguments);}fn(1,2,3,4,5);//1,2,3,4,5letfn1=()=>{console.log(arguments);}fn1(1,2,3,4,5);//arguments没有定义,说明箭头函数没有参数restparameters(remainingparameters)letfn=(a,b,...arg)=>{console.log(a,b,arg);}fn(1,2,3,4);//thisquestionfor12[3,4]箭头函数arrowfunctions本身是没有this的,在调用箭头函数this的时候,声明的时候指向作用域的this;document.onclick=function(){让fn=()=>{console.log(this);//指向文档}functionfn1(){console.log(this);//指向窗口}}fn();letfn;letfn2=function(){console.log(this);fn=()=>{console.log(this);}}fn2=fn2.bind(document.body);//执行后指向body,否则指向windowfn2();fn();参数默认值形参可以设置默认值letfn=(a=1,b=3)=>{console.log(a*b);}arraynewmethodArray.fromArrayArray.from(arrayLike[,mapFn[,this.Arg]])参数:arrayLike类数组可选参数:mapFn类似map方法,类数组数组循环时的回调函数,返回一个值组成新数组thisArgmapFn函数执行时,this指向返回值:根据arrayLikeArray.isArrayBooleanArray.isArray(data)检测数据是否为数组参数:data待检测数据返回值:true数组,false非数组Array.ofArrayArray.of(element0[,element1[,...[,elementN]]])convertparameterinto一个数组parameter:elementN要放入数组的数据返回值:NewarrayArray.findValuearr.find(callback[,thisArg])查找数组中第一个满足要求的元素的值参数:callback数组中的每一项上面执行的函数接受3个参数:当前遍历元素的元素索引[可选]当前遍历数组的索引[可选]数组本身可选参数:thisArg回调时作用于this的对象执行返回值:数组中第一个满足提供的测试函数的元素的值,否则返回undefinedArrat.findIndexIndexarr.findIndex(callback[,thisArg])查找数组中第一个元素的值的索引,满足要求s参数:数组中每个元素的回调会为每个元素执行回调函数,执行时会自动传入以下三个参数:element当前元素索引当前元素的索引数组调用findIndex的数组可选参数:thisArg执行回调时该对象的值返回值:Satisfied所需值的索引Array.flatArrayarr.flat([depth])将多维数组展平要提取的嵌套数组结构,默认值为1ifdepth:有多少层Infinity提取多少层包含数组和子数组中所有元素的新数组Array.flatMapflatMap()方法首先映射每个使用map函数的元素,然后将结果压缩到一个新数组中它几乎与附加到深度为1的平面的地图相同,但是当组合到一个方法中时,flatMap通常会稍微高效一些。arr.flatMap(functioncallback(currentValue[,index[,array]]){//返回新数组的元素}[,thisArg])参数:callback是一个可以生成新数组元素的函数,你可以传入三个参数:currentValue数组中当前正在处理的元素索引OptionalOptional当前正在处理的元素在数组array中的索引OptionalOptional要调用的map数组可选参数:thisArg回调函数时使用该值执行返回值:一个新数组,包含数组和子数组中的所有元素Array.includes()includes()方法用于判断一个数组是否包含指定值,根据情况,如果包含,返回true,否则返回falsearr.includes(valueToFind[,fromIndex])参数:valueToFind查找需要的元素值注意:使用includes()比较字符串和字符时,区分大小写。fromIndex从fromIndex索引中搜索valueToFind。如果为负数,则从array.length+fromIndex的索引开始按升序查找(即从末尾向前跳转到fromIndex索引的绝对值,然后向后查找)。默认为0。返回值:返回一个布尔值Boolean,如果在数组中找到(如果传入fromIndex,则表示在fromIndex指定的索引范围内找到),则返回true。
