Schreibweise einer for-Schleife
Karsten G.
- javascript
1 Kai345
Hallo,
es gibt ja einige Schreibweisen fuer eine for-Schleife in Javascript. Ich bin nun ueber eine neue Schreibweise gestolpert, mit der generell eine Zeile (Folge)Code eingespart werden kann. Da diese Schreibweise aber nicht ueblich erscheint, wollte ich einmal bei den Experten nachfragen, ob es abgesehen von Performancebetrachtungen andere Dinge gibt, die gegen diese Schreibweise sprechen wuerden?
Standardschreibweise ohne caching
var arr = [1,2,3,4];
for(var i = 0; i < arr.length;i++){
var item = arr[i];
// bla bla bla
}
neue Schreibform
var arr = [1,2,3,4];
for(var i = 0, item; item = arr[i] ;i++){
// bla bla bla
}
Gibt es mit der unteren Schreibweise Nachteile gegenueber der oberen, abgesehen von moeglichen Performanceueberlegungen?
Gruss,
Karsten
[latex]Mae govannen![/latex]
Hallo,
es gibt ja einige Schreibweisen fuer eine for-Schleife in Javascript. Ich bin nun ueber eine neue Schreibweise gestolpert, mit der generell eine Zeile (Folge)Code eingespart werden kann. Da diese Schreibweise aber nicht ueblich erscheint, wollte ich einmal bei den Experten nachfragen, ob es abgesehen von Performancebetrachtungen andere Dinge gibt, die gegen diese Schreibweise sprechen wuerden?
Standardschreibweise ohne caching
var arr = [1,2,3,4];
for(var i = 0; i < arr.length;i++){
var item = arr[i];
// bla bla bla
}
>
> neue Schreibform
> ~~~javascript
> var arr = [1,2,3,4];
> for(var i = 0, item; item = arr[i] ;i++){
> // bla bla bla
> }
>
Gibt es mit der unteren Schreibweise Nachteile gegenueber der oberen, abgesehen von moeglichen Performanceueberlegungen?
Die untere Schleife reagiert anders auf die Werte im Array. Während die obere Schleife _immer_ komplett durchläuft, wird die Untere nur solange ausgeführt, wie der jeweilige Wert von arr[i] nicht "falsy" (also 0, null, false, "", undefined) ist.
Eine Schleife über [1,2,0,4] würde also nur zwei Mal (Werte 1,2) durchlaufen. Das kann man auch natürlich gezielt ausnutzen, um ein bestimmtes Programmverhalten zu erreichen, bspw um einen sauberen Abbruch zu haben.
Ich benutze bspw. grundsätzlich die untere Form, um über Nodelisten und HTMLCollections, die mit getElementsBy* oder querySelector* zu iterieren (natürlich nur, wenn diese Listen [in der Schleife|generell] NICHT manipuliert werden, kommt auf den Fall an)
Stur lächeln und winken, Männer!
Kai
var jQuery = $(hit);
Besten Dank!
Hat mir sehr geholfen.
[latex]Mae govannen![/latex]
Besten Dank!
Hat mir sehr geholfen.
Generell kann man sagen: Man sollte, wenn man die zweite Variante nutzt, wissen, was man macht und vor allem was das Objekt (nicht im JS-technischen Sinne), über das iteriert werden soll) enthält|enthalten kann.
Wie ich schrieb, ist »undefined« einer der Werte, bei denen die Schleife abgebrochen wird, daher wird bei der zweiten Schleifen-Schreibweise beispielsweise ein löchriges Arrays nicht vollständig durchlaufen:
var a = [], i, v;
a[0] = 'foo';
a[1] = 'bar';
a[4] = 'baz';
for (i = 0; v = a[i]; i++) {
console.log(v);
}
/* Ausgabe:
foo
bar
*/
.
Stur lächeln und winken, Männer!
Kai
var jQuery = $(hit);
Man sollte, wenn man die zweite Variante nutzt, wissen, was man macht
und auch in welcher Sprache man das macht.
Das geht nämlich nicht überall. Manche Sprachen erzeugen einen Laufzeitfehler wenn man auf einen nicht existieren Index zugreift.