Rumah  >  Artikel  >  hujung hadapan web  >  Mengapa `Array.indexOf()` Gagal dalam IE8, dan Bagaimana Ia Boleh Dibetulkan?

Mengapa `Array.indexOf()` Gagal dalam IE8, dan Bagaimana Ia Boleh Dibetulkan?

DDD
DDDasal
2024-11-21 00:36:17827semak imbas

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

Fungsi Array.indexOf() Gagal dalam IE8

Fungsi indexOf(), digunakan untuk menyemak indeks elemen dalam tatasusunan , membentangkan cabaran dalam versi Internet Explorer (IE) sebelum 9. Khususnya, dalam IE8, fungsi ini tidak berfungsi seperti yang diharapkan, menyebabkan pembangun buntu.

Untuk mengesan punca, pertimbangkan fungsi berikut, yang berfungsi dalam penyemak imbas seperti Opera, Firefox dan 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) {...

Ralat berlaku apabila fungsi cuba melaksanakan pernyataan bersyarat if (allowed.indexOf(ext[1]) == -1 . Dalam IE8, indexOf() tidak disokong untuk tatasusunan, menyebabkan kod gagal.

Untuk membetulkan isu ini, pembetulan berikut boleh dilaksanakan:

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;
  };
}

Pembetulan ini menambah indexOf () kepada prototaip Array jika ia tidak hadir, khususnya menyasarkan IE8 atau ke bawah di mana ia tiada. Dengan memasukkan pembetulan ini, fungsi CheckMe() akan berfungsi seperti yang dimaksudkan, menyelesaikan isu dalam IE8.

Atas ialah kandungan terperinci Mengapa `Array.indexOf()` Gagal dalam IE8, dan Bagaimana Ia Boleh Dibetulkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn