JavaScript: dot Notation VS brackets


  • Mod

    Hallo Leute.

    Gibt es einen relevanten Unterschied in JavaScript zwischen:

    foo.bar="baz";
    //vs
    foo['bar']="baz"
    

    JSHint sagt, dass man lieber foo.bar schreiben sollte - aber eine wirkliche Begruendung kenne ich nicht. Ist es einfach nur eine Style Frage oder gibt es da tiefer liegende Gruende warum das eine oder das andere besser ist?



  • Ich kenne mich mit JavaScript nicht aus, aber die erste Schreibweise sieht sehr nach Syntatic Sugar aus.

    Insofern ist die kürzere Variante mit dem . zu empfehlen, da sie auch viel lesbarer ist und auch keine Klammern die Lesegeschwindigkeit reduzieren. Außerdem sind vom Interpreter natürlich viel weniger Token zu lesen, was sich vielleicht auch positiv auf die Ausführungsgeschwindigkeit auswirken könnte.

    Man vergleiche:

    x['a'] = 1;
    x['b'] = 1;
    x['c'] = 1;
    x['d'] = 1;
    x['e'] = 1;
    
    x.a = 1;
    x.b = 1;
    x.c = 1;
    x.d = 1;
    x.e = 1;
    

    Ersparnis von 4 Token je Zeile, also insgesamt 20 Token, die weniger einzulesen sind.

    Sind aber natürlich alles nur Vermutungen, die ich hier anstelle.



  • Die Bracket Notation ist natürlich sinnvoll, wenn es sich um Zahlen oder andere Dinge mit spezielle Bedeutung handelt:

    x['1'] = 1; // Klappt
    
    x.1 = 1; // Error
    

    Ansonsten ist sicherlich die Dot Notation zu empfehlen (s. vorherigen Post).


  • Mod

    ghjghjhg schrieb:

    Ersparnis von 4 Token je Zeile, also insgesamt 20 Token, die weniger einzulesen sind.

    1 Token! Nicht 4.
    Und selbst das spielt keine Rolle.



  • Denke es geht wohl um die Sauberkeit. Die Dot-Notation erlaubt wie schon erwähnt eben keine Zahl zu Beginn. Der index ist IMMER ein String und niemals eine "Zahl". Vll soll so vermieden werden das irgendwann ein unschöner Fehler geworfen wird, wenn der eine Programmierer die "subscript notation" und der andere die Dot variante nimmt. Ebenso kann man mit der subscription notation z.B. das keyword "this" als index benutzen.

    Die Sauberkeit des Codes wird durch die Dot variante meiner Meinung nach angehoben. 🙂

    edit:: Schönes Beispiel rausgekramt das es verdeutlicht wann subscript nützlich ist bzw. zwingend notwendig ist.
    http://www.dev-archive.net/articles/js-dot-notation/



  • argh doppelt ..



  • PRIEST schrieb:

    Die Dot-Notation erlaubt wie schon erwähnt eben keine Zahl zu Beginn.

    JAVASCRIPT erlaubt keine Zahl als Variablenbezeichner (ebenso keine Bezeichner die mit einer Zahl beginnen)! Die Begründung kann man also beruhigt ignorieren.

    Man sollte schon klar definieren, wann man was verwendet. Brackets selbstverständlich für nummerisch indizierte Arrays

    var hallo = new Array("foo", "bar");
    document.write(hallo[0]); // foo
    

    oder:

    var hallo = new Array();
    hallo[0] = "foo";
    hallo[1] = "bar";
    document.write(hallo[0]); // foo
    

    Dot's dann für solche Späße:

    var hallo = new Array();
    hallo['foo'] = 1;
    hallo['bar']  = 2;
    document.write(hallo.foo); // 1
    

    Bzw. um es sauber zu halten:

    hallo.foo = 3;
    document.write(hallo.foo); // 3
    

    VlG



  • hmmz schrieb:

    JAVASCRIPT erlaubt keine Zahl als Variablenbezeichner (ebenso keine Bezeichner die mit einer Zahl beginnen)! Die Begründung kann man also beruhigt ignorieren.

    Muss man das umbedingt bund unterstreichen? Dachte eig. das ist klar ... naja. *Bundstiftgeb*



  • Ja, es ist mir schon wichtig, die Schuld hier ganz klar an Javascript (bzw. deren Interpreter) abzugeben 😃 ! Sorry, ich wollt dir damit nicht zu nahe treten 🙂

    VlG


Log in to reply