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

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

DDD
Lepaskan: 2024-11-21 00:36:17
asal
938 orang telah melayarinya

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) {...
Salin selepas log masuk

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;
  };
}
Salin selepas log masuk

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan