"Array.prototype.slice: 'this' is not a JavaScript object" error in IE8

arrays, dom, javascript, nodelist, prototype

Solution

Update: A `NodeList` can be treated as an array in some ways - you don't actually have to do anything special with it before you can loop over it, for example:

var aDivs = [];
for (var = i = 0; i < divs.length; i++) {
    aDivs.push(divs[i]);
}

This will create an array with all of the nodes that matched when you ran `document.getElementsByTagName()`

See this question for a full explanation of why `slice` works with a `NodeList` in some browsers but not others, but it boils down this this sentence from the specification:

Whether the slice function can be applied successfully to a host object is implementation-dependent.

Problem

It is my understanding that IE8 has access to the `Array.prototype.slice` method. Yet when I try to call it to turn a `NodeList` into an array, it gives me the error `Array.prototype.slice: 'this' is not a JavaScript object`. You can check it out here, or look at my code here: HTML ``` <div id="test">Test</div> ``` JavaScript ``` var divs = document.getElementsByTagName('div'); divs = Array.prototype.slice.call(divs); console.log(divs); ``` What's going on here?

Original source

Related problems