Heim >Web-Frontend >js-Tutorial >Was ist der Unterschied zwischen for in-Schleife und for-Schleife in js?

Was ist der Unterschied zwischen for in-Schleife und for-Schleife in js?

一个新手
一个新手Original
2017-09-09 13:04:161988Durchsuche

JavaScript for...in-Anweisung

for...in-Anweisung wird verwendet, um die Eigenschaften eines Arrays oder Objekts zu durchlaufen.

for ... in Jedes Mal, wenn der Code in der Schleife ausgeführt wird, bearbeitet er die Elemente des Arrays oder die Eigenschaften des Objekts.

Tipp: For-In-Schleifen sollten zum Durchlaufen von Nicht-Array-Objekten verwendet werden. Die Verwendung von For-In als Schleife wird auch „Aufzählung“ genannt. ·

Syntax:

for (变量 in 对象)
{    在此执行代码}

„Variable“ wird zur Angabe von Variablen verwendet. Die angegebenen Variablen können Array-Elemente oder Attribute von Objekten sein.

Beispiel: Verwenden Sie for ... in, um das Array zu durchlaufen.

<html><body><script type="text/javascript">var x
var mycars = new Array()
mycars[0] = "Saab"
mycars[1] = "Volvo"
mycars[2] = "BMW"
for (x in mycars)
{
document.write(mycars[x] + "<br />")
}</script></body></html>

Hinweis 1: Die for in-Schleife ordnet die Ausgabe nicht entsprechend dem Index des Attributs an.

//code from http://caibaojian.com/js-loop-for-in.html"first":"first",   "zoo":"zoo",  "2":"2",  "34":"34",  "1":"1",  "second":"second"};for (var i in obj) { console.log(i); };输出:1234firstzoosecond

Drücken Sie beim Ausführen zum Ausführen zuerst die nicht negativen Ganzzahlschlüssel, sortieren Sie die Ausgabe und geben Sie dann den Rest in der Reihenfolge der Definition aus. Aufgrund dieser seltsamen Einstellung wird die ms-with-Objektsortierung von Avalon nicht wie erwartet ausgegeben. Sie können Benutzer nur dazu zwingen, Schlüsselnamen nicht mit reinen Zahlen zu definieren.

Beispiel 1: Ein neues Attribut wird für das Prototypobjekt des Arrays definiert und die Verwendung der for-Schleife stellt kein Problem dar.

function getNewArray(){var array=[1,2,3,4,5];Array.prototype.age=13;
var result = [];for(var i=0;i<array.length;i++){
result.push(array[i]);
}alert(result.join(''));
}

Beispiel 2: Eine for-in-Schleife wird verwendet. aber es gibt uns Erwartungen. Habe immer noch das korrekte Ergebnis von 12345 erhalten

function getArrayTwo(){var array=[1,2,3,4,5 ];
var result=[];
for(var i in array){
result.push(array[i]);
}alert(result.join(''));
}

Beispiel 3: Nach dem Hinzufügen von Attributen zum Prototyp wird dieser standardmäßig gezählt und gibt schließlich 1234513 aus

function getNewArrayTwo(){var array=[1,2,3,4,5 ];
Array.prototype.age=13;var result=[];
for(var i in array){
result.push(array[i]);
}alert(result.join(''));
}

Daher wird empfohlen, keine Arrays zu verwenden. Führen Sie eine for-in-Schleife aus. Tatsächlich wird im Buch High Performance JavaScript auch betont, dass die for-in-Schleife nicht gut ist, da sie immer auf den Prototyp des Objekts zugreift, um zu sehen, ob es welche gibt Attribute auf dem Prototyp Dies ist unbeabsichtigt. Dies erhöht den Druck beim Durchlaufen.

Lösung:

Wenn ein Objekt eine Eigenschaft mit dem angegebenen Namen hat, dann gibt Object.prototype.hasOwnProperty(name) true zurück. Wenn das Objekt diese Eigenschaft von der Prototypenkette erbt oder überhaupt nicht über eine solche Eigenschaft verfügt, wird false zurückgegeben. Beschränken Sie die for in-Schleife darauf, den Strom durch hasOwnProperty zu durchlaufen, ohne dessen Prototypeigenschaften zu berücksichtigen.

function finalArray(){var array=[1,2,3,4,5 ];
Array.prototype.age=13;
var result=[];for(var i in array){if(array.hasOwnProperty(i)){
result.push(array[i]);
}
}alert(result.join(''));
}

Hinweise:

1. Einige Browser, wie z. B. der frühe Safari-Browser, unterstützen diese Methode nicht

2 Wird oft als Hash-Wert verwendet, was das Risiko birgt, dass hasOwnProperty von anderen Eigenschaften blockiert wird (aber ich denke, niemand ist so langweilig, diese Eigenschaft zu verwenden)

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen for in-Schleife und for-Schleife in js?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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