我正在尝试使用变量声明和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];
}