Array.indexOf()-Funktion schlägt in IE8 fehl
Die indexOf()-Funktion wird verwendet, um den Index eines Elements in einem Array zu überprüfen , stellt in Internet Explorer (IE)-Versionen vor 9 Herausforderungen dar. Insbesondere in IE8 funktioniert diese Funktion nicht wie erwartet, sodass Entwickler zurückbleiben müssen ratlos.
Um die Grundursache zu ermitteln, betrachten Sie die folgende Funktion, die in Browsern wie Opera, Firefox und Chrome funktioniert:
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) {...
Der Fehler tritt auf, wenn die Funktion versucht Führen Sie die bedingte Anweisung if (allowed.indexOf(ext[1]) == -1) aus. In IE8 wird indexOf() für Arrays nicht unterstützt, was dazu führt, dass der Code fehlschlägt.
Um dieses Problem zu beheben, kann der folgende Fix implementiert werden:
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; }; }
Dieser Fix fügt indexOf hinzu ()-Methode zum Array-Prototyp hinzufügen, wenn sie nicht vorhanden ist, insbesondere für IE8 oder niedriger, wo sie fehlt. Durch die Einbindung dieses Fixes würde die CheckMe()-Funktion wie vorgesehen funktionieren und das Problem in IE8 lösen.
Das obige ist der detaillierte Inhalt vonWarum schlägt „Array.indexOf()' in IE8 fehl und wie kann es behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!