一、Array.of
    将参数作为数组元素,生成新数组。解决了Array构造函数产生的歧义(Array接受一个数字参数时,会返回对应长度的稀松数组)。

    1. let arr1 = new Array(3), //Array直接接受多个参数作为数组元素,但是会产生歧义。
    2. arr2 = Array.of(3);
    3. console.log(arr1, arr2)

    二、Array.from
    es5中的转化方法 : [].slice.call()
    es6中,将两类对象转化为数组
    a.类数组:nodeList,arguments,string
    b.可遍历的对象: map和set对象,以及具有遍历器生成函数的对象。
    将arguments转化为数组的用法可以通过rest参数代替,数组去重的时候将Array.from和Set构造函数配合使用。

    1. function test(...args){
    2. args.map((item)=>{
    3. return ++item
    4. })
    5. }
    6. let arr = [12,1,1,2,2,4];
    7. console.log(Array.from(new Set(arr)))

    (1)Array.from和拓展运算符的比较
    Array.from调用了Iterator接口,只要部署了Iterator接口,Array.from都能将其转化为数组。(string,nodelist,arguments,map,weakMap,set,weakSet,typedArray)Array.from还能转化类似数组的对象(具有length属性),只要有length属性,Array.from就能转化。
    拓展运算符也可以将某些数据转化为数组,也是调用了iterator接口。拓展运算符还不能转化类似数组的对象。

    1. let arrLikeObj = {length:3};
    2. console.log(Array.from(arrLikeObj))
    3. console.log([...arrLikeObj]) // 报错 arrLikeObj is not iterable
    1. 2)参数<br />1.转化原对象<br />2.类似map的方法,处理每个元素,将处理后的值放入返回的数组。
    1. let map = (item)=> item*2;
    2. console.log(Array.from([1,2,3], map)) // => [2, 4, 6]
    3. function myTypeof (){
    4. return Array.from(arguments, (item)=> typeof item)
    5. }

    三、Array.fill
    给定某一个值,用来填充指定起始范围元素(左开右闭)
    参数:
    1.填充的值
    2.填充开始位置,可正可负
    3.填充结束位置,可正可负

    1. let arr = [1,2,3];
    2. arr.fill(6,-2,2)
    3. console.log(arr) // => [1, 6, 3]

    四、Keys(),Values(),Entries()
    返回数组的一个迭代器对象,可以手动调用next方法,可以使用for … of进行遍历。

    1. let arr = [1, 2, 3, 4, 5],
    2. keys = arr.keys(),
    3. values = arr.values(),
    4. entries = arr.entries();
    5. for (let index of keys){
    6. console.log(index)
    7. }
    8. for (let val of values){
    9. console.log(val)
    10. }
    11. for (let entry of entries){
    12. console.log(entry)
    13. }
    14. entries.next() // 此处遍历器迭代完了,返回value为undefined,done为true的对象

    五、copyWithin在数组自身内将指定范围元素覆盖其他元素
    参数:
    1.被覆盖的位置
    2.覆盖元素开始位置,默认值为0
    3.覆盖元素结束位置 ,默认值为数组length,左开右闭

    1. let arr = [1, 2, 3, 4, 5];
    2. arr.copyWithin(1) // => [1, 1, 2, 3, 4]
    3. arr.copyWithin(1,2) // => [1, 3, 4, 5, 5]
    4. console.log([].copyWithin.call({length: 5, 3: 1}, 1, 3)) // => {'1' : 1, '3' : 1}
    1. fill还是有区别,fill用指定值来填充范围内元素,copyWithin是用选中的元素来覆盖其他元素。

    六、includes, find,findIndex
    includes接收一个参数,用来判断数组是否包含改参数可以判断NaN,返回boolean。
    find接收一个验证回调函数,用来找寻第一个通过验证函数的元素,如果没有符合条件的元素则返回undefined。
    findIndex接收一个验证回调函数,返回第一个满足验证函数元素的索引,如果没有符合条件的元素则返回-1。
    indexOf用来判断元素在数组的索引。

    find和findIndex都可以遍历NaN,而indexOf不能。es6解决了NaN与NaN相等的问题。

    1. console.log([NaN].indexOf(NaN)) // => -1
    2. let test = (elem,index,arr)=>{
    3. console.log(elem,index,arr)
    4. return Object.is(NaN, elem)
    5. // Object.is 只判断数据的值,值相等就返回true。 NaN与NaN,-0 与 +0
    6. }
    7. console.log([NaN].findIndex(test)) // 0

    七、数值拓展
    (1)给Number添加了静态方法 isNaN
    es5中,全局方法isNaN会将参数转化,转化后得到NaN返回true,否则返回false
    Number.isNaN不会先将参数隐式转化

    1. console.log(Number.isNaN('abc'), isNaN('abc'))
    1. <br />(2)Number.isFinite()<br />es5中,全局isFinite会对参数进行隐式转化,es6中将isFinite挂到了Number上,而Number.isFinite不会对参数进行隐式转化。
    1. console.log(isFinite('123'), Number.isFinite('123')) // => true, false
    1. 3Number.MAX_SAFE_INTEGER Number.isSafeInterger<br />js引擎目前能精确处理的最大数为 Math.pow(2, 53) - 1
    1. console.log(Number.MAX_SAFE_INTEGER === (Math.pow(2, 53) - 1) ) // => true
    2. console.log(Number.MIN_SAFE_INTEGER === ( -Math.pow(2, 53) + 1) ) // => true