Bad Praxis ist nicht der Unterschied zwischen Aufzählen über zu verstehen ein Array-Objekt und Iterieren darüber. Ansonsten for...in
Schleife ist ein hervorragendes Werkzeug. Es gibt großen internen Unterschied, aber ich werde versuchen, in der praktischen Art und Weise zu erklären:
Syntax ist: for (string in object)
, wo object
ist eine Instanz Object
(und natürlich eine ihrer Nachkomme) und string
var erhält Eigenschaftsnamen von object
bei jeder Schleifeniteration. Aber Array
ist ein Object
Nachkomme auch! So ist es vollkommen legal zu nutzen:
var array = [0,1,2];
for (var property in array)
alert(typeof property + '\t' + property + '\n' + typeof array[property] + '\t' + array[property]);
aber einfach macht keinen Sinn überhaupt. Beachten Sie außerdem die Klammernotation über []
. Dies ist eine Form des Mitgliedschaftsoperators und darf nicht mit dem Zugriff auf Array-Elemente verwechselt werden. Zuerst werden Operanden vom Typ string
und zweite - number
benötigt. Lässt das obige Beispiel brechen und stattdessen ein Array mit var array = new Array(3)
erstellen. Loop funktioniert nicht mehr, noch array.length == 3
korrekt.
Fazit: Verwenden Sie for...in
für alle Objekte außer Arrays. Verwenden Sie for (var number = 0; number < array.length; number++)
mit Arrays.
Übrigens, JavaScript Objekte sind ähnlich mit assoziativen PHP-Arrays (Hashtables, wenn Sie auf den richtigen Begriff bestehen). Syntax ist var object = {string:value,anotherName:moreStuff}
. Hier kommt for...in
praktisch!
Further reading
Siehe auch David Humphreys Beitrag [Iterieren über Objekte in JavaScript Schnell] (http://vocamus.net/dave/?p=1205) - für Arrays ist es viel langsamer. –