Heim Web-Frontend js-Tutorial Probleme und Lösungen, die durch die Erweiterung von Array.prototype.indexOf für JS_Basic-Kenntnisse verursacht werden

Probleme und Lösungen, die durch die Erweiterung von Array.prototype.indexOf für JS_Basic-Kenntnisse verursacht werden

May 16, 2016 pm 04:18 PM
array indexof

Array verfügt nicht über eine indexOf-Methode, daher ist es schwierig, den Index eines Elements in einem Array zu finden. Zur Vereinfachung des Aufrufs wird Array.prototype.indexOf() durch den Prototyp-Prototyp erweitert, was es einfacher macht bequem zu verwenden. Beim Durchlaufen des Arrays gab es jedoch ein Problem mit diesem benutzerdefinierten indexOf.

Code kopieren Der Code lautet wie folgt:

Array.prototype.indexOf = function(item) {
for (var i = 0; i < this.length; i ) {
if (this[i] == item)
gib i zurück
}
return -1;
}

Direkt bei Verwendung von

Code kopieren Der Code lautet wie folgt:

var arr=[1,2,3,4,5]; var index=arr.indexOf(1); //index==0

Nach der Erweiterung ist es sehr komfortabel und bequem zu bedienen und schafft eine harmonische Szene...

Aber einmal wurde beim Durchlaufen von Array-Elementen eine for..in..-Schleife verwendet, was andere Probleme verursachte und die harmonische Atmosphäre störte.

Code kopieren Der Code lautet wie folgt:
var a=["Zhang Fei", "Guan Yu", "Liu Bei", "Lü Bu"]; for(var p in a){
document.write(p "=" a[p] "<br/>"); }



Ursprünglich wollte ich die Namen dieser vier Personen ausgeben, aber was wurde ausgegeben?
Die Ausgabe lautet tatsächlich:

Code kopieren Der Code lautet wie folgt: //0=Zhang Fei
//1=Guan Yu
//2=Liu Bei
//3=Lu Bu
//indexOf=function(item) { for (var i = 0; i < this.length; i ) { if (this[i] == item) return i }



Zusätzlich zur Eingabe des Namens wird auch eine eigene erweiterte Methode indexOf ausgegeben. Das Verrückte ist jedoch, dass Firefox „normal“ ist und nur die Namen von vier Personen enthält.

AusgabeindexOf, der selbst erweitert werden kann, was verständlich ist. Schließlich durchläuft for..in alle benutzerdefinierten Attribute eines Objekts oder alle Elemente eines Arrays.

Warum also nicht Firefox?

Ich habe es später herausgefunden, nachdem ich die Informationen überprüft hatte,

Array unterstützt bereits Array.indexOf() in Javascript-Version 1.6, und das von mir verwendete Firefox ist Version 3.5, das bereits Javascript 1.8 unterstützt. IndexOf ist eine inhärente Methode von Array selbst.

Obwohl ich IE8 verwende, unterstützt der IE nur Version 1.3 von JavaScript.

Daher betrachtet IE8 indexOf als ein „benutzerdefiniertes Attribut“, während Firefox es als ein inhärentes Attribut betrachtet, das von sich selbst nativ unterstützt wird.

Ist das wirklich so?

Führen Sie ein Experiment durch, benennen Sie indexOf in myIndexOf um und versuchen Sie es erneut. Als Ergebnis geben sowohl IE als auch Firefox myIndexOf aus, was beweist, dass der vorherige Punkt korrekt ist.

Dann kommt hier ein weiteres Problem. Jetzt verwenden viele Projektcodes diese Methode, aber jetzt muss ich for..in verwenden, um die Elemente des Arrays selbst auszugeben. Ich möchte es nicht selbst verlängern. Was soll ich tun, wenn ich nach Russland komme?

Glücklicherweise stellt Javascript die Methode hasOwnProperty bereit.

Schauen Sie sich die Beschreibung an:

Code kopieren Der Code lautet wie folgt: Jedes von Object abgeleitete Objekt erbt die Methode hasOwnProperty. Diese Methode kann verwendet werden, um zu bestimmen, ob ein Objekt die angegebene Eigenschaft als direkte Eigenschaft dieses Objekts hat. Diese Methode überprüft nicht die Prototypenkette des Objekts

Wenn man sich die Beschreibung ansieht, ist es genau das, was wir wollen.
Machen Sie einfach ein Urteil für...in... und es ist OK

Code kopieren

Der Code lautet wie folgt: if(a.hasOwnProperty(p)){                   document.write(p "=" a[p] "<br/>"); }


Darüber hinaus finden Sie hier ein Beispiel für die Verwendung von hasOwnProperty aus dem Internet:

Code kopieren

Der Code lautet wie folgt:

Funktion Buch(Titel, Autor) { 
   this.title = Titel; 
   this.author = Autor; 
  } 
   Book.prototype.price = 9,99; 
   Object.prototype.copyright = "herongyang.com"; 
   var myBook = new Book("JavaScript Tutorials", "Herong Yang"); 
   // Integrierte Eigenschaften auf der Ebene des Basisprototyps ausgeben 
   document.writeln("/nObject.prototype's integrierte Eigenschaften:"); 
   dumpProperty(Object.prototype, "constructor"); 
   dumpProperty(Object.prototype, "hasOwnProperty"); 
   dumpProperty(Object.prototype, "isPrototypeOf"); 
   dumpProperty(Object.prototype, "toString"); 
   dumpProperty(Object.prototype, "valueOf"); 
   dumpProperty(Object.prototype, "copyright"); 
   // Integrierte Eigenschaften auf der Ebene „Mein Prototyp“ ausgeben 
   document.writeln("/n==================/nBook.prototype's integrierte Eigenschaften:"); 
   dumpProperty(Book.prototype, "constructor"); 
   dumpProperty(Book.prototype, "hasOwnProperty"); 
   dumpProperty(Book.prototype, "isPrototypeOf"); 
   dumpProperty(Book.prototype, "toString"); 
   dumpProperty(Book.prototype, "valueOf"); 
   dumpProperty(Book.prototype, "copyright"); 
   // Integrierte Eigenschaften auf Objektebene ausgeben 
   document.writeln("/n==================/nmyBook's integrierte Eigenschaften:"); 
   dumpProperty(myBook, "constructor"); 
   dumpProperty(myBook, "hasOwnProperty"); 
   dumpProperty(myBook, "isPrototypeOf"); 
   dumpProperty(myBook, "toString"); 
   dumpProperty(myBook, "valueOf"); 
   dumpProperty(myBook, "copyright"); 
Funktion dumpProperty(object, property) { 
   Var-Vererbung;  
   if (object.hasOwnProperty(property))  
      Vererbung = „Lokal“; 
   sonst 
      inheritance = „Geerbt“; 
   document.writeln(property ": " inheritance ": "
      Objekt[Eigenschaft]); 
}

查看浏览器支持javascript到哪个版本:

复制代码 代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml"> <Kopf> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Browser-JavaScript-Versionsunterstützungstest</title> </head> <Körper> <script language="JavaScript"> //document.write("Ihr Browsertyp:" navigator.appName "<br/>"); //document.write("Browserversion:" navigator.appVersion "<br/>"); //Browser, die JavaScript1.0 unterstützen, können dieses Skript ausführen
Document.write('Dieser Browser unterstützt JavaScript1.0<br/>');
</script> <script language="JavaScript1.1"> // Nur Browser, die JavaScript1.1 unterstützen, können dieses Skript ausführen
Document.write('Dieser Browser unterstützt JavaScript1.1<br/>');
</script> <script language="JavaScript1.2"> // Nur Browser, die JavaScript1.2 unterstützen, können dieses Skript ausführen
Document.write('Dieser Browser unterstützt JavaScript1.2<br/>');
</script> <script language="JavaScript1.3"> //Browser, die JavaScript1.3 unterstützen, können dieses Skript ausführen
Document.write('Dieser Browser unterstützt JavaScript1.3<br/>');
</script> <script language="JavaScript1.4"> //Browser, die JavaScript1.4 unterstützen, können dieses Skript ausführen
Document.write('Dieser Browser unterstützt JavaScript1.4<br/>');
</script> <script language="JavaScript1.5"> //Browser, die JavaScript1.5 unterstützen, können dieses Skript ausführen
Document.write('Dieser Browser unterstützt JavaScript1.5<br/>');
</script> <script language="JavaScript1.6"> //Browser, die JavaScript1.6 unterstützen, können dieses Skript ausführen
Document.write('Dieser Browser unterstützt JavaScript1.6<br/>');
</script> <script language="JavaScript1.7"> //Browser, die JavaScript1.7 unterstützen, können dieses Skript ausführen
Document.write('Dieser Browser unterstützt JavaScript1.7<br/>');
</script> <script language="JavaScript1.8"> // Nur Browser, die JavaScript 1.8 unterstützen, können dieses Skript ausführen
Document.write('Dieser Browser unterstützt JavaScript1.8<br/>');
</script> <script language="JavaScript1.9"> //Browser, die JavaScript1.9 unterstützen, können dieses Skript ausführen
Document.write('Dieser Browser unterstützt JavaScript1.9<br/>');
</script> </body> </html>


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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Array mit der Array.Sort-Funktion in C# sortieren Array mit der Array.Sort-Funktion in C# sortieren Nov 18, 2023 am 10:37 AM

Array mit der Array.Sort-Funktion in C# sortieren

Einfache und klare Methode zur Verwendung der PHP-Funktion array_merge_recursive() Einfache und klare Methode zur Verwendung der PHP-Funktion array_merge_recursive() Jun 27, 2023 pm 01:48 PM

Einfache und klare Methode zur Verwendung der PHP-Funktion array_merge_recursive()

So verwenden Sie die Funktion array_combine in PHP, um zwei Arrays zu einem assoziativen Array zu kombinieren So verwenden Sie die Funktion array_combine in PHP, um zwei Arrays zu einem assoziativen Array zu kombinieren Jun 26, 2023 pm 01:41 PM

So verwenden Sie die Funktion array_combine in PHP, um zwei Arrays zu einem assoziativen Array zu kombinieren

Detaillierte Erläuterung der Verwendung der PHP-Funktion array_fill() Detaillierte Erläuterung der Verwendung der PHP-Funktion array_fill() Jun 27, 2023 am 08:42 AM

Detaillierte Erläuterung der Verwendung der PHP-Funktion array_fill()

So verwenden Sie das Array-Modul in Python So verwenden Sie das Array-Modul in Python May 01, 2023 am 09:13 AM

So verwenden Sie das Array-Modul in Python

Was ist die Verwendung der Indexof-Methode in Java? Was ist die Verwendung der Indexof-Methode in Java? May 17, 2023 pm 02:28 PM

Was ist die Verwendung der Indexof-Methode in Java?

Was sind die häufigsten Ursachen für ArrayStoreException in Java? Was sind die häufigsten Ursachen für ArrayStoreException in Java? Jun 25, 2023 am 09:48 AM

Was sind die häufigsten Ursachen für ArrayStoreException in Java?

Was sind die Unterschiede zwischen Indexof und Includes? Was sind die Unterschiede zwischen Indexof und Includes? Nov 24, 2023 pm 01:20 PM

Was sind die Unterschiede zwischen Indexof und Includes?

See all articles