• 数组的转化


    1.字符串转换为数组

         扩展运算符可以将字符串转为真正的数组:

    [...'hello']
    // [ "h", "e", "l", "l", "o" ]

    2.具有Iterator接口的对象可以转换为数组

        任何定义了遍历器(Iterator)接口的对象(参阅 Iterator 一章),都可以用扩展运算符转为真正   的数组。

    let nodeList = document.querySelectorAll('div');
    let array = [...nodeList];

    上面代码中,querySelectorAll方法返回的是一个NodeList对象。它不是数组,而是一个类似数组的对象。这时,扩展运算符可以将其转为真正的数组,原因就在于NodeList对象实现了 Iterator 。

    3.没有部署Iterator接口的类似数组的对象,扩展运算符就无法将其转为真正的数组。

      但是可以用Array.from将对象转换为真正的数组

    (Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象)

     let arrayLike = {
      '0': 'a',
      '1': 'b',
      '2': 'c',
      length: 3
    };
    
    // TypeError: Cannot spread non-iterable object.
    // let arr = [...arrayLike];
    var a = Array.from(arrayLike)
    console.log(a)// ["a", "b", "c"]

    要将一个类数组对象转换为一个真正的数组,必须具备以下条件:
    (1)该类数组对象必须具有length属性,用于指定数组的长度。如果没有length属性,那么转换后的数组是一个空数组。
    (2)该类数组对象的属性名必须为数值型或字符串型的数字
    该类数组对象的属性名可以加引号,也可以不加引号

    Array还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。

    总结:

    扩展运算符背后调用的是遍历器接口(Symbol.iterator),如果一个对象没有部署这个接口,就无法转换。Array.from方法还支持类似数组的对象。所谓类似数组的对象,必须有length属性。任何有length属性的对象,都可以通过Array.from方法转为数组,而此时扩展运算符就无法转换。

    4.Array.of()方法用于将一组值,转换为数组。

    Array.of(3, 11, 8) // [3,11,8]
    Array.of(3) // [3]
    Array.of(3).length // 1
  • 相关阅读:
    NodeJS优缺点
    移动端触摸相关事件touch、tap、swipe
    vscode使用技巧
    js 字符串转数字
    js 导出Excel
    <!--[if IE 9]> <![endif]-->
    js 异步请求
    关于windows串口处理
    mfc 托盘提示信息添加
    微软的麦克风处理示列代码
  • 原文地址:https://www.cnblogs.com/psxiao/p/11455820.html
Copyright © 2020-2023  润新知