Heim > Web-Frontend > js-Tutorial > Warum schlägt „Array.indexOf()' in IE8 fehl und wie kann es behoben werden?

Warum schlägt „Array.indexOf()' in IE8 fehl und wie kann es behoben werden?

DDD
Freigeben: 2024-11-21 00:36:17
Original
899 Leute haben es durchsucht

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

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) {...
Nach dem Login kopieren

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;
  };
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage