JavaScript/Objekte/Array

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

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.


Syntax

Array([length][...items])


Attribute
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.


Beispiel
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.


Beispiel
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.


Beispiel
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.


Hinweis:
Wird als einziges Argument hingegen ein negativer Zahlenwert übergeben oder handelt es sich bei dem Wert nicht um eine Ganzzahl, dann wird ein Range Error geworfen, der das Programm unbehandelt zum Absturz bringt. Das Gleiche passiert, wenn der Wert NaN oder der Wert Infinity als Argument an Array übergeben wird. Unproblematisch ist es hingegen, eine Ganzzahl als Kommazahl zu notieren, also hinter den Wert einen Punkt und eine Null zu setzten, da Zahlen in JavaScript ohnehin als Fließkommazahlen gespeichert werden.


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.


Beispiel
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.


Beispiel
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.


Beispiel
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

Spezifikation

Array ECMAScript 2015 2017 Draft