1. ホーム
  2. ジャバスクリプト

[解決済み】Internet Explorerのブラウザで、JavaScriptのArray indexOf()を修正する方法

2022-03-30 18:12:32

質問

もしあなたがJavaScriptを少しでも扱ったことがあるなら、Internet ExplorerがArray.prototype.indexOf()のECMAScript関数を実装していないことを知っているでしょう[Internet Explorer 8を含む]。これは大きな問題ではなく、以下のコードでページ上の機能を拡張することができます。

Array.prototype.indexOf = function(obj, start) {
     for (var i = (start || 0), j = this.length; i < j; i++) {
         if (this[i] === obj) { return i; }
     }
     return -1;
}

いつまでに実装すればいいのか?

プロトタイプ関数が存在するかどうかをチェックし、存在しない場合はArrayプロトタイプを拡張していく、というようなチェックをすべてのページで行うべきでしょうか。

if (!Array.prototype.indexOf) {

    // Implement function here

}

それとも、ブラウザチェックをして、Internet Explorerであれば、そのまま実装するのでしょうか?

//Pseudo-code

if (browser == IE Style Browser) {

     // Implement function here

}

解決方法は?

こんな感じでやってください...

if (!Array.prototype.indexOf) {

}

として MDCによる推奨互換性 .

一般に、ブラウザ検出コードは大反対です。