JavaScript/Objekte/Array
Mit dem eingebauten Konstruktor Array können Arrays erzeugt werden. Über das in der Eigenschaft prototype von Array hinterlegte Objekt wird eine Vielzahl an Methoden an alle Arrayinstanzen vererbt. Auf diese Weise wird ein Großteil der eingebauten Funktionalität für Arrays bereitgestellt. Der Konstruktor verfügt jedoch auch selbst über einige Methoden, mit denen zum Beispiel geprüft werden kann, ob es sich bei einem bestimmten Wert um ein Array handelt oder nicht.
Vererbte Eigenschaften
Vererbte Methoden
Inhaltsverzeichnis
Syntax
Array([length][...items])
Writable | true |
Enumerable | false |
Configurable | true |
Referenzierung
Der Konstruktor Array ist eine Eigenschaft des globalen Objektes, also in dem Fall, dass es sich bei der Ausführungsumgebung um einen Webbrowser handelt, eine Eigenschaft des Objektes window. Er kann aber nicht nur als Objekteigenschaft, sondern auch als globale Variable referenziert werden, die überall im Programm sichtbar ist, solange sie nicht durch eine Variable, Konstante oder Funktion mit demselben Bezeichner innerhalb der Kette der Gültigkeitsbereiche (Scope Chain) verschattet wird.
console.log(typeof Array); // function
void function (Array) {
console.log(typeof Array); // undefined
}( );
Bei der ersten Prüfung mit dem Operator typeof in dem Beispiel oben wird die Zeichenkette function in die Konsole geschrieben, da hier der Konstruktor Array als globale Variable korrekt referenziert wurde. Bei der zweiten Prüfung im Körper der unmittelbar aufgerufenen Funktion wird hingegen der String undefined ausgegeben, da hier ein formaler Parameter mit demselben Bezeichner notiert wurde, der die Variable Array verschattet. Wollte man innerhalb dieser Funktion den Konstruktor Array referenzieren, müsste man dies also über die Eigenschaft des globalen Objektes tun.
Erzeugung von Arrays
Wird Array als Funktion oder als Konstruktor aufgerufen, dann wird immer eine neue Arrayinstanz erzeugt und zurückgegeben, unabhängig vom Muster des Aufrufs. Ob und falls ja, mit welchen Elementen das erzeugte Array initialisiert wird, hängt dabei von den übergebenen Argumenten ab. Wird beim Aufruf kein Argument übergeben, dann wird einfach ein leeres Array zurückgegeben.
const empty = new Array;
console.log(empty.length); // 0
In diesem Beispiel wird die Funktion Array unter Verwendung des Operators new als Konstruktor aufgerufen. Da bei diesem Aufruf keine Argumente übergeben wurden, wird ein leeres Array erzeugt und zurückgegeben, wie die Ausgabe des Wertes der Eigenschaft length zeigt.
const array = Array(3);
console.log(array.length); // 3
console.log(array[1]); // undefined
Wird Array beim Aufruf nur ein einziges Argument übergeben und handelt es sich bei dem übergebenen Wert um eine positive Ganzzahl, dann wird ein Array erzeugt und zurückgegeben, dessen Eigenschaft length den entsprechenden Wert besitzt. Die einzelnen Elemente des Arrays bleiben dabei aber undefiniert.
Da bei der Übergabe nur eines Argumentes, wenn dessen Wert vom Datentyp Number ist, immer versucht wird, diesen als Wert für die Eigenschaft length des erzeugten Arrays zu setzen und dem zur Folge ein Fehler produziert wird, wenn es sich bei dem Wert nicht um eine positive Ganzzahl handelt, kann ein Array auf diese Weise nicht mit einem einzigen Element vom Datentyp Number initialisiert werden. In diesem Fall muss entweder die Methode Array.of verwendet werden oder, wenn möglich, das Array in Literalschreibweise erstellt werden.
const array = Array('element');
console.log(array.length); // 1
console.log(array[0]); // element
Wenn beim Aufruf von Array nur ein Argument übergeben wird und dieses nicht vom Datentyp Number ist, dann wird ein Array erzeugt und zurückgegeben, das den übergebenen Wert als erstes Element enthält, also an der Indexposition 0, über die der Wert entsprechend unter Verwendung der Klammersyntax referenziert werden kann.
const list = Array(16, 32, 64);
console.log(list.length); // 3
console.log(list[2]); // 64
Wird Array beim Aufruf mehr als ein Argument übergeben, dann werden alle übergebenen Werte als Elemente in dem neu erzeugten Array hinterlegt und der Wert der Eigenschaft length des Arrays entspricht grundsätzlich der Anzahl der übergebenen Argumente.
Verwendung
Es ist grundsätzlich nicht empfehlenswert, Arrays unter Verwendung des Konstruktors Array zu erzeugen, da es für diesen Zweck eine spezielle und deutlich elegantere Syntax gibt (Array Initializer). So kann ein Array auch durch eine öffnende und eine schließende eckigen Klammer erzeugt werden, wobei die Elemente, mit denen das Array initialisiert werden soll, in Form einer Liste durch Komma getrennt dazwischen notiert werden.
const empty = [ ];
const list = ['alpha', 'omega'];
const numbers = [5.8];
Wie die letzte Variante in dem Beispiel oben zeigt, gibt es hierbei auch keine Probleme, wenn zunächst nur ein Element in dem Array hinterlegt werden soll und dieses Element keine positive Ganzzahl ist, was beim Aufruf des Konstruktors wie gesehen einen Range Error erzeugt hätte. Es ist also anzuraten, für die Erzeugung von Arrays prinzipiell die hier gezeigte Literalschreibweise zu verwenden, oder alternative die Methode Array.of.
Weblinks
- MDN: Array
Spezifikation
Array | ECMAScript 2015 | 2017 Draft |