新增静态函数Array.offunctiontype://接收任意数量任意类型的参数,并按照传入顺序返回这些参数的数组(...args?:any[])=>any[];Array.of用于创建具有可变数量参数的新数组实例。它与通过Array构造函数创建数组的区别在于,使用newArray创建数组时,如果只传入一个整型参数a,则会创建一个长度为a的数组,每个元素为一个空位(参考为空,而不是未定义),而Array.of将创建并返回[a]。控制台日志(数组(3));//[<3个空项>]console.log(Array.of(3));//[3]当我们需要根据传入的参数创建数组时,如果使用Array构造函数,并且没有对参数仅为整数的情况进行特殊处理,就会出现意想不到的情况。这种没有逻辑的细节问题,往往是我们修复时最难意识到的一类问题。Array.from函数类型:/***@author:forceddd*@desc:根据传入的伪数组或可迭代对象创建一个新的浅拷贝数组实例*@param{ArrayLike|Iterable}arrayLike传入数据源*@param{MapFn}mapFn可选映射函数,同Array.map*@param{any}thisArg可选this对象,映射函数mapFn中的this会指向this参数*@return{any[]}新创建的数组*/(arrayLike:ArrayLike|Iterable,mapFn?:MapFn,thisArg?:any)=>any[];/***@author:forceddd*@desc:映射回调*@param{any}数组中的值元素*@param{number}索引元素在数组中的下标*@return{any}映射返回值*/typeMapFn=(value:any,index:number)=>any;Array.from是根据传入的伪数组或可迭代对象创建一个新的浅拷贝数组实例。与Array.of不同的是,Array.of直接将参数作为返回值数组中的元素,而Array.from会根据传入的参数生成返回值数组:当传入伪数组时,伪数组的长度将作为返回值数组的长度,伪数组的元素将作为返回值数组的元素。//一个伪数组console.log(Array.from({0:'第一个元素',length:2}));//['第一个元素',undefined]//标签属性不能转换为一个数组下标,过滤掉console.log(Array.from({0:'第一个元素',length:2,tag:'一个字符串键'}));//['第一个Item元素',undefined]//传入的是普通对象,既不是伪数组也不是可迭代对象,返回空数组console.log(Array.from({0:'第一个元素',tag:'Astringkey'}));//[]当传入一个可迭代对象参数时,如Array、Set等,会对该参数进行迭代,迭代得到的值将作为返回值数组中的元素。console.log(Array.from([1,,3]));//[1,undefined,3]console.log(Array.from(newSet([1,,3])));//[1,undefined,3]//引入了一个映射函数console.log(Array.from([1,2,3],(item)=>2*item));//[2,4,6]constobj={value:0,//自定义[Symbol.iterator],对象变成可迭代对象,执行得到的迭代器本身就是[Symbol.iterator](){return这;},//value>3后,设置迭代状态为true,结束迭代next(){this.value++;返回{值:this.value,完成:this.value>3,};},};//引入一个自定义的iterableconsole.log(Array.from(obj));//[1,2,3]需要注意的是Array.from不会产生空的空间(empty),如果元素传入的位置为空(empty),将使用undefined作为结果。当我们需要将一个伪数组转换成一个真正的数组以便使用数组映射和其他方法时——比如dom操作,相比使用[].slice.call(arrayLike)(这种方法可能会产生空元素),使用Array.from无疑是一种更加优雅简洁的方式。为什么要避免数组中的空元素?在处理数组的函数中,不同的函数以不同的方式处理空元素。有些函数会忽略空元素,比如map函数,有些则不会,比如Array.from,这很可能会产生一些莫名其妙的问题。如果我们需要通过变量count来统计一个数组的长度,这样就可以很清楚的看到空元素的问题。有空元素时:constempty=[1,,3];letcount1=0;letcount2=0;empty.map(()=>count1++);Array.from(empty,()=>count2++);//因为map函数忽略了空元素,所以传入的回调只执行了两次,count1的值为2console.log({count1,count2});//{count1:2,count2:3}当不存在元素为空时:constnormal=[1,undefined,3];letcount1=0;letcount2=0;normal.map(()=>count1++);normal.forEach(()=>count2++);console.log({count1,count2});//{count1:3,count2:3}