javascript - 即使使用 Polyfill,IE 也不支持 forEach。

标签 javascript

我已将 forEach polyfill 添加到我的 JavaScript 文件的顶部,但 Internet Explorer 仍然说它不支持该功能。

我基本上想遍历 querySelector 的结果,但是我确实在我的脚本中的一些其他数组对象上使用了 forEach。

这在 Chrome 上一切正常。

// Production steps of ECMA-262, Edition 5, 15.4.4.18
// Reference: http://es5.github.io/#x15.4.4.18
if (!Array.prototype.forEach) {

  Array.prototype.forEach = function(callback/*, thisArg*/) {

    var T, k;
    if (this === null) {
      throw new TypeError('this is null or not defined');
    }
    var O = Object(this);
    var len = O.length >>> 0;
    if (typeof callback !== 'function') {
      throw new TypeError(callback + ' is not a function');
    }
    if (arguments.length > 1) {
      T = arguments[1];
    }
    k = 0;
    while (k < len) {
      var kValue;
      if (k in O) {
        kValue = O[k];
        callback.call(T, kValue, k, O);
      }
      k++;
    }
  };
}

(function() {

  var instance = null,
      container;

  // Constructor
  this.MarvLightbox = function() {
    // Initialise plugin
    this.init();
  };

  // Initilise the plugin
  MarvLightbox.prototype.init = function() {

    document.querySelectorAll('[data-click]').forEach(function(e) {
      e.addEventListener('click', [clickevent]);
    });

  };

}());

难道不应该添加 polyfill 来解决 IE 的这个问题吗?

最佳答案

让 IE9+ 支持 forEach 的另一种方法:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <span class="demo">See me.</span>
    <span class="demo">See me.</span>
    <span class="demo">See me.</span>
    <span class="demo">See me.</span>
    <script>
        // Function to make IE9+ support forEach:
        if (window.NodeList && !NodeList.prototype.forEach) {
            NodeList.prototype.forEach = Array.prototype.forEach;
        }

        // Works with Nodelists (i.e. HTMLcollections):
        var demos = document.querySelectorAll('.demo');
        demos.forEach(function(item) {
            item.style.color = 'red';
        });

        // As well as with Arrays:
        var gherkins = ['gher1', 'gher2', 'gher3'];
        gherkins.forEach(function(item) {
            console.log(item);
        });
    </script>
</body>
</html>

在 IE11 中测试,根据其模拟功能,也适用于 10 和 9(不是 8)。

关于javascript - 即使使用 Polyfill,IE 也不支持 forEach。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44652092/

相关文章:

javascript - 客户端人工智能的实际问题

javascript - 单击更改 DIV 的样式并在取消单击时再次更改

javascript - 如果我从在线数据库服务器获取它,则无法在页面上显示 json 数据返回,但它适用于本地服务器数据库

javascript - 在 url 中推送查询参数时,Vue.js 中的 "NavigationDuplicated"异常是否有任何解决方法,同时保持在同一路径上

javascript - 简单 PHP 到 Ajax 'not logged in' 错误 - 如何解决?

javascript - Angular js 电子邮件验证不适用于域名

javascript - Javascript 中的 S3 waitUntilObjectExists

javascript - 一页上有许多用于社交网络的共享按钮

javascript - 使html post表单提交后自动返回

javascript - 在使用 Firebase 的 React-native GiftedChat 聊天应用程序中加载早期消息时遇到问题