Array hat keine Index -Methode, daher ist es schwieriger, den Index eines Elements in einem Array zu finden. Um das Aufrufen zu erleichtern, wird Array.Prototype.indexof () durch den Prototyp -Prototyp erweitert, der bequemer zu verwenden ist. Dieser benutzerdefinierte Index hat jedoch Probleme, wenn er das Array durchquert.
Die Codekopie lautet wie folgt:
Array.prototype.indexof = function (item) {
für (var i = 0; i <this.Length; i ++) {
if (this [i] == item)
kehre I zurück;
}
Return -1;
}
Bei der Verwendung ist es unkompliziert
Die Codekopie lautet wie folgt:
var arr = [1,2,3,4,5];
var index = arr.indexof (1); // index == 0
Nach der Ausdehnung ist es sehr erfrischend und bequem zu bedienen, und es ist eine harmonische Szene ...
Aber wenn einmal die Array -Elemente über die für..in iteriert. Schleife verursachte andere Probleme und brach die harmonische Atmosphäre.
Die Codekopie lautet wie folgt:
var a = ["zhang fei", "Guan yu", "liu Bei", "lu bu"];
für (var p in a) {
document.write (p+"="+a [p]+"<br/>");
}
Ich wollte ursprünglich die Namen dieser vier Personen ausgeben, aber was war das Ergebnis?
Die Ausgabe ist eigentlich:
Die Codekopie 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; } return -1; }
Zusätzlich zum Eingeben des Namens gibt es auch einen eigenen erweiterten Methodenindex aus, aber was verrückt ist, ist, dass Firefox mit nur vier Namen von Personen "normal" ist. Warum passiert das?
Der Ausgangsindex, der von selbst erweitert wird, kann verstanden werden. Schließlich soll in allen benutzerdefinierten Eigenschaften eines Objekts oder aller Elemente eines Arrays iterieren.
Warum also nicht Firefox?
Nachdem ich die Informationen überprüft hatte, wurde mir klar
Array unterstützt Array.Indexof () in der JavaScript 1.6 -Version bereits, während die von mir verwendete Firefox -Version Version 3.5, die JavaScript 1.8 bereits unterstützt. Indexof ist eine inhärente Methode des Arrays selbst.
IE, selbst wenn ich IE8 verwende, unterstützt es nur die JavaScript 1.3 -Version.
Daher ist IE8 der Ansicht, dass Indexof ein "benutzerdefiniertes Attribut" ist, während Firefox der Ansicht ist, dass es sich um ein inhärentes Attribut handelt, das von seiner eigenen nativen Unterstützung unterstützt wird.
Ist das wirklich der Fall?
Führen Sie ein Experiment durch, ändern Sie den Index von MyIndexof und versuchen Sie es erneut. Infolgedessen gibt sowohl IE als auch Firefox MyIndexof aus, was beweist, dass der vorherige Punkt korrekt ist.
Dann kommt eine andere Frage. Ich habe den Index von langer Zeit erweitert. Jetzt haben viele Projektcodes diese Methode verwendet. Jetzt muss ich verwenden, um Elemente des Arrays selbst auszugeben. Erweitern Sie es nicht selbst auf die russische Methode. Was soll ich tun?
Glücklicherweise bietet JavaScript die HasownProperty -Methode.
Schauen Sie sich die Beschreibung an:
Die Codekopie lautet wie folgt:
Jedes von Objekt stammende Objekt erbt die HasownProperty -Methode. Diese Methode kann verwendet werden, um festzustellen, ob ein Objekt die angegebene Eigenschaft als direkte Eigenschaft dieses Objekts hat. Im Gegensatz zum Operator untersucht diese Methode die Prototypkette des Objekts nicht
Nach der Beschreibung zu urteilen, ist es das, was wir wollen.
Machen Sie einfach ein Urteil für ... in ...
Die Codekopie lautet wie folgt:
if (a.hasownProperty (p)) {
document.write (p+"="+a [p]+"<br/>");
}
Darüber hinaus wird ein Beispiel für die Verwendung von HasownProperty beigefügt, die aus dem Internet stammt:
Die Codekopie lautet wie folgt:
Funktionsbuch (Titel, Autor) {
this.title = title;
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 ablegen
document.writeeln ("/nobject.Prototype integrierte Eigenschaften:");
Dumpproperty (Object.Prototyp, "Konstruktor");
Dumpproperty (Object.Prototype, "HasownProperty");
Dumpproperty (Object.Prototype, "isPrototypeof");
Dumpproperty (Object.Prototype, "toString");
Dumpproperty (Object.Prototyp, "valueOf");
Dumpproperty (Object.Prototype, "Copyright");
// integrierte Eigenschaften auf My Prototype-Ebene ablegen
document.WriteLn ("/n ======================/nbook.Prototyps integrierten Eigenschaften:");
Dumpproperty (Buch.Prototyp, "Konstruktor");
dumpproperty (book.prototype, "hasownProperty");
dumpproperty (book.prototype, "isprototypeof");
dumpproperty (book.prototype, "tostring");
dumpproperty (book.prototype, "valueof");
Dumpproperty (Buch.Prototyp, "Copyright");
// integrierte Eigenschaften auf Objektebene ablegen
document.WriteLn ("/n =======================/nmybooks integrierten Eigenschaften:");
Dumpproperty (MyBook, "Konstruktor");
Dumpproperty (MyBook, "HasownProperty");
dumpproperty (mybook, "isprototypeof");
Dumpproperty (MyBook, "ToString");
dumpproperty (mybook, "valueof");
Dumpproperty (MyBook, "Copyright");
Funktion Dumpproperty (Objekt, Eigenschaft) {
var Vererbung;
if (Object.hasownProperty (Eigentum)))
Vererbung = "lokal";
anders
Erbschaft = "Vererbung";
document.writeeln (Eigenschaft+":"+Erbschaft+":"
+Objekt [Eigenschaft]);
}
Überprüfen Sie, welche Version von JavaScript vom Browser unterstützt wird:
Die Codekopie lautet wie folgt:
<! DocType html public "-// w3c // dtd xhtml 1.0 transitional // en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transsitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml">
<kopf>
<meta http-äquiv = "content-type" content = "text /html; charset = utf-8" />
<titels> Die JavaScript -Version des Browsers unterstützt Tests </title>
</head>
<body>
<script Language = "JavaScript">
//document.write("Your Browser Typ: "+navigator.appname+" <br/> ");
//document.write("Browser -Version: "+navigator.appversion+" <br/> ");
// Browser, die JavaScript 1.0 unterstützen
document.write ('Dieser Browser unterstützt JavaScript1.0 <br/>');
</script>
<script Language = "JavaScript1.1">
// Browser, die JavaScript 1.1 unterstützen
document.write ('Dieser Browser unterstützt JavaScript1.1 <br/>');
</script>
<script Language = "JavaScript1.2">
// Browser, die JavaScript 1.2 unterstützen
document.write ('Dieser Browser unterstützt JavaScript1.2 <br/>');
</script>
<script Language = "JavaScript1.3">
// Browser, die JavaScript 1.3 unterstützen
document.write ('Dieser Browser unterstützt JavaScript1.3 <br/>');
</script>
<script Language = "JavaScript1.4">
// Browser, die JavaScript 1.4 unterstützen
document.write ('Dieser Browser unterstützt JavaScript1.4 <br/>');
</script>
<script Language = "JavaScript1.5">
// Browser, die JavaScript 1.5 unterstützen
document.write ('Dieser Browser unterstützt JavaScript1.5 <br/>');
</script>
<script Language = "JavaScript1.6">
// Browser, die JavaScript 1.6 unterstützen
document.write ('Dieser Browser unterstützt JavaScript1.6 <br/>');
</script>
<script Language = "JavaScript1.7">
// Browser, die JavaScript 1.7 unterstützen
document.write ('Dieser Browser unterstützt JavaScript1.7 <br/>');
</script>
<script Language = "JavaScript1.8">
// Browser, die JavaScript 1.8 unterstützen
document.write ('Dieser Browser unterstützt JavaScript1.8 <br/>');
</script>
<script Language = "JavaScript1.9">
// Browser, die JavaScript 1.9 unterstützen
document.write ('Dieser Browser unterstützt JavaScript1.9 <br/>');
</script>
</body>
</html>