Ronny Riedel: Frage zur Notation

Hallo zusammen,

ich hab in einer JS-Datei folgende Notation gefunden:

var configFarben = new Object();  
  
configFarben. Rot   = 'red'  
configFarben. Gelb  = 'yellow'  
configFarben. Gruen = 'green'  
configFarben. Blau  = 'blue'  
  
function xyz() {  
//weiterer Code

Kann mir das jemand mal erklären? Ich bin der Meinung, das jeder Befehl in JS mit einem ";" abgeschlossen werden muß, das ist hier aber nicht der Fall. Auch was das mit dem "[ObjektName]. [Name]" aufsicht hat, ist mir schleierhaft.

Thx / Gruß
  RR

  1. Moin Moin!

    configFarben. Rot   = 'red'

    Kann mir das jemand mal erklären? Ich bin der Meinung, das jeder Befehl in JS mit einem ";" abgeschlossen werden muß, das ist hier aber nicht der Fall.

    KANN, nicht MUSS. Leider.

    Auch was das mit dem "[ObjektName]. [Name]" aufsicht hat, ist mir schleierhaft.

    objektName.Name ist nahezu equivalent zu objektName['Name'], jedoch kann in der zweiten Notation ein beliebiger String benutzt werden, während in der ersten Notation ein gültiger Identifier erforderlich ist.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
  2. Ich bin der Meinung, das jeder Befehl in JS mit einem ";" abgeschlossen werden muß, das ist hier aber nicht der Fall.

    JavaScript (ECMAScript) hat eine automatische Semikolon-Einfügung, die es an gewissen Stellen nicht erforderlich macht, Semikola einzufügen, weil sie der Interpreter selbst welche einfügt, wenn die Syntax sonst fehlerhaft werden würde.

    Von diesem Feature, das man vor allem als Fehlertoleranz betrachten sollte, sollte man aber nicht absichtlich Gebrauch machen, weil es an vielen Stellen uneindeutigen und fehleranfälligen Code erzeugt.

    Aber noch etwas zu deinem Codebeispiel. Ein Objekt samt mehrerer Eigenschaften kann man auch viel einfacher mit einem Objekt-Literal notieren:

    var configFarben = {
      Rot : 'red',
      Gelb : 'yellow',
      Gruen : 'green',
      Blau : 'blue'
    };

    Das ist gleichwertig zur Schreibweise var configFarben = new Object(); und dem anschließenden Anhängen dieser Eigenschaften.

    Auch was das mit dem "[ObjektName]. [Name]" aufsicht hat, ist mir schleierhaft.

    Das ist nicht anderes als der Zugriff auf eine Objekteigenschaft. Da wird erst ein generisches Object-Objekt erzeugt und danach werden ohm Eigenschaften angehängt.

    Wahrscheinlich kennst du nur die Schreibweise »objekt.eigenschaft« oder nutzt sie zumindest selbstverständlich. Nun, »objekt.eigenschaft« ist ein JavaScript-Ausdruck bestehend aus einem Operator und zwei Operanden. Der Operator ist der ».«, das ist der sogenannte Property Accessor Operator (Operator zum Zugriff auf Objekteigenschaften). Die Operanden sind beide Bezeichner (»objekt« und »eigenschaft«).

    Der Witz ist nun, dass zwischen Operand und Operator üblicherweise beliebig viel Whitespace (Leerzeichen, Tabulatoren usw.) stehen darf. Ob man also objekt.eigenschaft oder objekt   .   eigenschaft schreibt, kommt auf dasselbe heraus. Aus demselben Grund sind 1<2 und 1 < 2 sowie 1+2 und 1 + 2 äquivalent.

    Mathias

    1. @@molily:

      Der Witz ist nun, dass zwischen Operand und Operator üblicherweise beliebig viel Whitespace (Leerzeichen, Tabulatoren usw.) stehen darf.

      Auch Zeilenumbrüche?

      Tatsächlich. Unglaublich, aber wahr:

      var a = new Object();  
      a  
      .  
      foo = "foo";  
      alert(a.foo);
      

      Wieder was dazugelernt.

      Live long and prosper,
      Gunnar

      --
      Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
      1. Unglaublich, aber wahr:

        var a = new Object();

        a
        .
        foo = "foo";
        alert(a.foo);

          
        Man kann ja auch  
          
        str = "foo " +  
          "bar " +  
          "quux";  
          
        schreiben. Das ist dasselbe, aber wahrscheinlich nichts neues für dich.  
          
        Die Semicolon Insertion greift erst ein, wenn ein »offending token« gefunden wird. a wird als Expression Statement geparst, in der nächsten Zeile steht ein Punkt, das kann problemlos noch zum Expression Statement dazugehören. Erst alert wäre der offending token (weil dann zwei ein String-Literal ohne Operand auf einen Bezeichner treffen würde), wenn die Zeile foo = "foo"; nicht mit einem Semikolon abgeschlossen wäre.  
          
        Mathias
        
        -- 
        [JavaScript-Erweiterung für das SELFHTML-Forum](http://forum.de.selfhtml.org/js/doku/)
        
        1. @@molily:

          Man kann ja auch

          str = "foo " +
            "bar " +
            "quux";

          schreiben. Das ist dasselbe

          Stimmt. Wenn man’s so sieht, ist '.' ja genauso ein Operator wie '+'.

          Live long and prosper,
          Gunnar

          --
          Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
  3. Hallo zusammen,

    Danke für die Erklärungen.

    Grüße
      RR