IE8中的"Array.prototype.slice:'this'不是JavaScript对象"错误

Aus*_*ust 9 javascript arrays dom prototype nodelist

据我所知,IE8可以访问该Array.prototype.slice方法.然而,当我试图将它NodeList变成一个数组时,它给了我错误Array.prototype.slice: 'this' is not a JavaScript object.你可以在这里查看,或者在这里查看我的代码:

HTML

<div id="test">Test</div>
Run Code Online (Sandbox Code Playgroud)

JavaScript的

var divs = document.getElementsByTagName('div');
divs = Array.prototype.slice.call(divs);
console.log(divs);
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

Kel*_*vin 9

更新:A NodeList可以在某些方面被视为一个数组 - 在你可以循环之前,你实际上不必对它做任何特殊的事情,例如:

var aDivs = [];
for (var = i = 0; i < divs.length; i++) {
    aDivs.push(divs[i]);
}
Run Code Online (Sandbox Code Playgroud)

这将创建一个包含运行时匹配的所有节点的数组 document.getElementsByTagName()

请参阅此问题,以获得有关为什么在某些浏览器中使用而不是在其他浏览器中slice工作的完整解释NodeList,但它从规范中归结为这句话:

切片功能是否可以成功应用于主机对象取决于实现.