ホームページ > ウェブフロントエンド > jsチュートリアル > IE8 で「Array.indexOf()」が失敗する理由とその修正方法は?

IE8 で「Array.indexOf()」が失敗する理由とその修正方法は?

DDD
リリース: 2024-11-21 00:36:17
オリジナル
901 人が閲覧しました

Why Does `Array.indexOf()` Fail in IE8, and How Can It Be Fixed?

Array.indexOf() 関数が IE8 で失敗する

配列内の要素のインデックスをチェックするために使用される、indexOf() 関数、Internet Explorer (IE) 9 より前のバージョンでは問題が発生します。具体的には、IE8 では、この機能は期待どおりに動作せず、開発者は作業を中断します。

根本原因を追跡するには、Opera、Firefox、Chrome などのブラウザで機能する次の関数を考慮してください。

function CheckMe() {
    var allowed = new Array('docx','xls','xlsx', 'mp3', 'mp4', '3gp', 'sis', 'sisx', 'mp3', 'wav', 'mid', 'amr', 'jpg', 'gif', 'png', 'jpeg', 'txt', 'pdf', 'doc', 'rtf', 'thm', 'rar', 'zip', 'htm', 'html', 'css', 'swf', 'jar', 'nth', 'aac', 'cab', 'wgz');
    var fileinput=document.getElementById('f');
    var ext = fileinput.value.toLowerCase().split('.');
    
    if (allowed.indexOf(ext[1]) == -1) {...
ログイン後にコピー

関数が次のことを試みるとエラーが発生します。 if (allowed.indexOf(ext[1]) == -1) 条件文を実行します。 IE8 では、indexOf() は配列に対してサポートされていないため、コードが失敗します。

この問題を修正するには、次の修正を実装できます:

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}
ログイン後にコピー

この修正により、indexOf が追加されます。 () メソッドを Array プロトタイプに追加します (存在しない場合)。特に、それが存在しない IE8 以下を対象としています。この修正を組み込むことで、CheckMe() 関数が意図したとおりに実行され、IE8 の問題が解決されるようになります。

以上がIE8 で「Array.indexOf()」が失敗する理由とその修正方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート