Orlok: Objekt in Array so zulässig?

Beitrag lesen

Hallo

var o = {a, b, c};

Wozu soll das gut sein?

Das macht den Code besser lesbar und verringert die Wahrscheinlichkeit von Programmierfehlern.

Schauen wir uns ein Beispiel ohne Shorthand Property Names an:

// First declare some constants

const a = 1, b = 2, c = 3;


// Then initialize object with properties

const object = {
    a: a,
    b: b,
    c: c
};

Hier muss für jede Eigenschaftsdefinition der Name der Variable oder Konstante zweimal notiert werden, einmal als Eigenschaftsname und einmal zur Referenzierung des Wertes.

Handelt es sich wie hier nur um Bezeichner bestehend aus einem Buchstaben, dann ist das kein Problem. Es ist aber in den seltensten Fällen angemessen, solche Bezeichner zu verwenden. In aller Regel möchte man aus Gründen der besseren Lesbarkeit längere, sprechende Variablennamen notieren.

// More realistic declaration

const aLongAndDescriptiveIdentifier = 'value';


// Object initializer

const object = {
    aLongAndDescriptiveIdentifier: aLongAndDescripitveIdentifier
};

Das obige Beispiel ist kaputt. Siehst du den Fehler?

Bei der Definition der Eigenschaft innerhalb des Objektliterals wurde zwar der Name der Eigenschaft richtig geschrieben, aber bei der Wiederholung des Bezeichners hat sich ein Buchstabendreher eingeschlichen.

Die Ausführung des Programms wird mit einem ReferenceError abgebrochen.

Dabei ist dies noch die harmlosere Variante, da sofort offenbar wird, dass hier irgendwo ein Fehler vorliegt. Schlechter wäre es, wenn statt dem Bezeichner der Konstante der Name der Objekteigenschaft falsch geschrieben worden wäre.

// Suppose the property name had been misspelled.

object.aLongAndDescriptiveIdentifier; // undefined

In diesem Fall wird natürlich kein Fehler geworfen. Es wird einfach eine Eigenschaft unter dem falschen Namen angelegt. Es wird auch kein Fehler geworfen, wenn mit dem eigentlich richtigen Namen versucht wird, die Eigenschaft zu referenzieren.

Wenn es keine solche Eigenschaft gibt, dann wird einfach undefined zurückgegeben.

Die Wiederholung von Bezeichnern bei der Eigenschaftsdefinition kostet mehr Zeit und erhöht darüber hinaus das Risiko, dass man sich verschreibt und damit Fehler in das Programm einbaut, die gegebenenfalls erst sehr viel später auffallen.

Auch das Lesen des Codes, etwa bei einer Code-Review, ist mit mehr kognitivem Aufwand verbunden, da immer geprüft werden muss, ob der Bezeichner auf beiden Seiten der Eigenschaftsdefinition richtig geschrieben ist.

// Example using shorthand syntax

const aLongAndDescriptiveIdentifier = 'value';


// Just reference constant

const object = { aLongAndDescriptiveIdentifier };

Wird wie in dem Beispiel oben die Kurzschreibweise verwendet, dann muss nur noch ein Bezeichner auf Korrektheit geprüft werden.

Insbesondere ist von Vorteil, dass wenn man sich bei dieser Notation verschreibt (abgesehen von dem unwahrscheinlichen Fall, dass innerhalb der lexikalischen Umgebung des Ausdrucks eine Bindung für den falsch geschriebenen Namen existiert), in jedem Fall ein Fehler produziert wird. Kann die Referenz nämlich nicht aufgelöst werden, dann führt dies unmittelbar zu einem ReferenceError.

Ein Fehler wie oben, der verschleppt und erst zu einem späteren Zeitpunkt erkannt wird, kann hier gar nicht erst passieren.

// First declare some constants

const a = 1, b = 2, c = 3;


// Then initialize object with properties

const object = { a, b, c };

Aus diesen Gründen würde ich empfehlen, in Fällen in denen für Variablen, Konstanten oder Parameter gleichnamige Objekteigenschaften definiert werden sollen, prinzipiell die Kurzschreibweise zu verwenden.

Viele Grüße,

Orlok

0 47

Objekt in Array so zulässig?

Silke Seide
  • javascript
  1. 0
    pl
    1. 0
      Silke Seide
  2. 0
    dedlfix
    1. 0
      ursus contionabundo
      1. 0
        dedlfix
        1. 0
          pl
          1. 0
            dedlfix
            1. 0
              pl
              1. 5
                Orlok
                • javascript
                • programmiertechnik
                1. 0
                  ursus contionabundo
                  1. 0
                    pl
                    1. 0
                      beatovich
                      1. 0
                        pl
                  2. 0
                    mark
                  3. 0
                    dedlfix
                    1. 0
                      Christian Kruse
                      1. 0
                        dedlfix
                        1. 0
                          Christian Kruse
                          1. 0
                            dedlfix
                            1. 0
                              Christian Kruse
                              1. 0
                                dedlfix
                                1. 0
                                  Christian Kruse
                                  1. 0
                                    1unitedpower
                                    1. 0
                                      1unitedpower
                                2. 2
                                  Rolf B
                                  1. 0
                                    Christian Kruse
                                  2. 0
                                    dedlfix
                                    1. 0
                                      Christian Kruse
                                      1. 0
                                        dedlfix
                                        1. 0
                                          Christian Kruse
                                    2. 0
                                      Rolf B
                              2. 0
                                dedlfix
                                1. 0
                                  Christian Kruse
                      2. 3
                        Christian Kruse
                        1. 0
                          dedlfix
                          1. -1
                            pl
                          2. 0
                            ursus contionabundo
                            1. 1
                              dedlfix
                        2. 0
                          Rolf B
                  4. 0
                    1unitedpower
                2. 0
                  1unitedpower
        2. 0
          ursus contionabundo
          1. 0
            pl
            1. 0

              Alter Perl-Pseudohash in modernem JS ...

              ursus contionabundo
              • javascript
              • meinung
              1. 0
                pl
    2. 0
      Silke Seide