从不作为IIFE工作的节点列表创建简单数组



我正在尝试使用变量声明和IIFE动态创建一个数组,尽管它似乎没有将每个项添加到数组中。以这个html为例:

<div>test</div>
<div>test</div>
<div>test</div>
<div>test</div>
<div>test</div>

这个javascript:

const divs = document.querySelectorAll('div');
const divsTwo = [...divs]; // not IE compatible
const divsThree = (function() {
    let arr = [];
    for (let item of divs) {
        arr.push[item];
    }
    return arr;
})();
// logging
console.log(divs); // correctly logs node list
console.log(divsTwo); // correctly logs array (right?)
console.log(divsThree); //* logs an empty (incorrect) array

我本质上只想复制divsTwo(通过divsThree(,使其与IE兼容。有人能指出为什么第三个变量和第二个变量不一样吗?感谢您在这里提供的任何帮助

代码笔:https://codepen.io/ns91/pen/JjdrZyP

一条注释显示您未正确使用Array.prototype.push。还有更好的方法。

使用Array.from将任何可迭代项转换为数组-

const divs =
  document.querySelectorAll('div')
const myArr =
  Array.from(divs)
console.log(myArr)
// [div, div, div, ..., div]

如其他答案中所述,您似乎只是打字错误,正试图调用arr.push[]而不是arr.push()(注意使用了括号而不是括号(。

然而,就IE而言,使DOM节点列表成为数组的标准方法如下:

var divs = document.querySelectorAll('div');
var divsArr = Array.prototype.slice.call(divs);

注意,我使用var,因为const也不兼容IE。

我认为问题在for循环中。尝试

 for (let item in divs) {
        arr.push[item];
    }

最新更新