2010-11-23 12 views

Antwort

10

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

+2

Siehe auch David Humphreys Beitrag [Iterieren über Objekte in JavaScript Schnell] (http://vocamus.net/dave/?p=1205) - für Arrays ist es viel langsamer. –

Verwandte Themen