Karsten G.: Schreibweise einer for-Schleife

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

  1. [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);
    Unsere Identität entnehmen Sie bitte dem beigefügten Auszug aus den Personenstandsbüchern. Gegen die Assimilierung in unser Kollektiv ist nach dem ABGB (§666, Abs. 3/IV) kein Rechtsmittel zulässig. Wir bitten um Ihr Verständnis.
    SelfHTML-Forum-Stylesheet
    1. Besten Dank!

      Hat mir sehr geholfen.

      1. [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);
        „Die Borg würden nicht mal Spaß verstehen, wenn sie einen Vergnügungspark assimiliert hätten!” (B'Elanna Torres)
        SelfHTML-Forum-Stylesheet
        1. 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.