Orlok: variationen an Objekten-deklaration! Wann ist welche Sinnvoll?

Beitrag lesen

Hallo

wann ist es sinniger eines der beiden im Quellcode zunehmen???

var irgendwas = { eins : "eins", zwei : "zwei" }

oder

var irgendwas = ["eins","zwei","..."];

Jeweils unter Verwendung der Literalschreibweise erzeugst du in deinem ersten Beispiel ein Objekt und in deinem zweiten Beispiel ein Array, aber wie du im Titel deines Beitrags schon bewusst (oder unbewusst) festgestellt hast, sind Arrays in JavaScript ebenfalls Objekte.

Das heißt, mit var obj = { } erzeugst du eine Instanz von Object.prototype und mit var arr = [ ] eine Instanz von Array.prototype, wobei Array wiederum von Object erbt.

oder

var irgendwas = new Array();
irgendwas[0]  = "irgendwer";
irgendwas[1]  = "...";

Hier rufst du die Funktion Array( ) als Konstruktor auf ohne Argumente zu übergeben, so dass in var irgendwas zunächst einmal ein leeres Array gespeichert wird, dessen Indizes 0 und 1 du dann jeweils einen String als Wert zuweist.

Abgesehen davon, dass die Verwendung des Schlüsselwortes new hier überflüssig ist, da die Funktion Array( ) ohnehin ein neues Array als Rückgabewert hat (du hier also auch var irgendwas = Array( ) hättest schreiben können), dürfte auf den ersten Blick ersichtlich sein, dass diese Variante gegenüber der Literalnotation deutlich weniger „elegant“ ist.

Das heißt, in der Regel sollte ein Array so erzeugt werden: var arr = [ ], beziehungsweise direkt mit Wertübergabe: var arr = ['eins', 'zwei', 'drei']

Ich denke man kann alles in allen variationen lösen aber wie ist es eleganter?

Die Frage ist hier nicht in erster Linie, was eleganter ist, sondern was im konkreten Einzelfall benötigt wird, ein Array oder ein Object.

Zwar ist wie gesehen ein Array ebenfalls ein Objekt, aber Arrays verfügen über Eigenschaften und Methoden, über die plain objects nicht verfügen. Beispiel:

var arr = [1, 2, 3];
console.log(arr.length); // 3

var obj = { '1' : 1, '2' : 2, '3' : 3 };
console.log(obj.length); // undefined

Bedenke: Es gibt in JavaScript keine assoziativen Arrays. Das heißt, du kannst, weil Arrays ja auch Objekte sind, zwar schreiben…

var arr = [ ];
arr['Hallo'] = 'Welt';

…aber arr.length bliebe bei 0 und arr[0] bei undefined, dass heißt, letztlich würdest du hier nur ein Array wie ein Objekt verwenden, weshalb du in diesem Fall auch gleich ein Objekt verwenden könntest und solltest.

Grundsätzlich gilt also: Hast du eine Anzahl verschiedener Werte, auf welche du über einen numerischen Index zugreifen kannst, verwende ein Array, ansonsten ein Objekt.

Gruß,

Orlok