Internet Explorer 11中的SCRIPT438错误

Pra*_*wal 13 javascript foreach internet-explorer

我最近一直在研究JavaScript,一切都很好,直到我在IE11中打开我的页面.按照Mozilla的网站 .forEach,从IE9支持.

这是我得到的错误.

SCRIPT438:对象不支持属性或方法'forEach'

这是代码.

var link1 = document.querySelectorAll("nav a");
    var textbox = document.getElementById("OutputWindow");
    link1.forEach(function (element) {
        textbox.innerHTML += "<br/>" + element + "\n";
        element.onclick = function () {
            alert("Hello!");
            console.log("hello!");
            confirm("Hello!");
        };
    });
Run Code Online (Sandbox Code Playgroud)

我尝试了polyfill,但令我高兴的Array是,forEachIE11中有一个.

然后我出错了?

PS:这在Chrome中运行良好.

Pra*_*wal 29

终于神秘解决了.

显然,IE9及以上版本支持Array.forEach但不支持NodeList,querySelector返回.我试图Array.from()无济于事,因为它需要ES6或使用ES6-shim.

我所要做的就是从转换nodeListArray,我做到了.

Array.prototype.slice.call(document.querySelectorAll("nav a"), 0);
Run Code Online (Sandbox Code Playgroud)

如问题所示在Javascript中,将NodeList转换为数组的最佳方法是什么


小智 6

if (typeof Array.prototype.forEach != 'function') {
Array.prototype.forEach = function (callback) {
    for (var i = 0; i < this.length; i++) {
        callback.apply(this, [this[i], i, this]);
    }
 };
}

if (window.NodeList && !NodeList.prototype.forEach) {
    NodeList.prototype.forEach = Array.prototype.forEach;
 }  
Run Code Online (Sandbox Code Playgroud)

  • 感谢您提供此代码片段,它可能会提供一些有限的即时帮助。[正确的解释](https://meta.stackexchange.com/q/114762/349538) 将通过展示为什么这是一个很好的问题解决方案来极大地提高其长期价值,并将使其对未来的读者更有用与其他类似的问题。请[编辑]您的答案以添加一些解释,包括您所做的假设。 (2认同)