Rumah > Artikel > hujung hadapan web > Mengapa `Array.indexOf()` Gagal dalam IE8, dan Bagaimana Ia Boleh Dibetulkan?
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!