コンソールでこのスニペットを実行しています。 IEでは、期待どおりの出力を生成します。参照のためにCrとFFで同じことを実行すると、動作の合同性が確認されます。オブジェクトがそれに宣言されていないのforEach(...)を持っていることを私に言ってIEはコンソールから呼び出されたときにforEach(...)をサポートしますが、コードから呼び出されたときはサポートしません
["a", "b"].forEach(function(element) {
console.log(element);
});
次のスクリプトを実行している場合しかし、私はエラーを取得しています。この問題はIEでは発生しますが、CrやFFでは発生しません。
var menus = document.querySelectorAll("ul.application>li>a");
menus.forEach(function(element) { ... }
私は変数メニューが宣言されていることをチェックしましたし、それはそれの要素を選ぶことは、私が期待するものを作り出すすなわちメニュー[0]が存在し、タグです。それはIEとは少し違って見えますが、それはちょっと違うかもしれません。
私はCrとFFで作業することを祝福されていますので、IEに関する私の経験は限られています。グーグルは私に多くの知恵を与えなかった。
さらにトラブルシューティングを行うにはどうすればよいですか?
でそれを変換することができ、この1
のように、
Array.prototype
からメソッドを借りることができます(そして、IE/SafariはNodeList.forEachをサポートしません。[MDN](https://developer.mozilla.org/en-US/docs/Web/API/NodeList/forEach)を参照してください)。 –私が知る限り、 'querySelectorAll'は' HtmlCollection'を返します。これは 'Array'と同じではありませんが、Chromeは内部polyfillを持っている可能性があります。 – Nope
その "祝福"も呪いです:)ブラウザは、そのような内部的な回避策を実装することによって補うと、IEが壊れてしまい、また将来のバージョンで変更されないカスタム実装に依存するようになります:)たとえば、 ChromeがforEachでHtmlCollectionを拡張するためのサポートを継続しているという保証はありません。過去に行ったことがあります:) Internet Explorerは特定のバージョンのIEを含む複数のブラウザをサポートする必要がある場合、おそらく、IEで最初に動作するようになっているのは、その理由からです。 – Nope