Start · Sprachen · JavaScript · Referenz · new Array()

new Array()

Methode

Der <code>Array()</code>-Konstruktor erzeugt ein neues <code>Array</code>-Objekt – entweder mit den übergebenen Elementen oder als leeres Array mit einer vorgegebenen Länge.

seit JavaScript ES1 (Baseline: alle Browser) Kategorie: method-property

Signatur

new Array(...elements) | new Array(arrayLength)

Beschreibung

Mit new Array() erzeugen Sie ein neues Array-Objekt. Der Konstruktor verhält sich je nach Argumenten unterschiedlich. Übergeben Sie genau ein Argument vom Typ number, entsteht ein Array mit dieser length, aber ohne echte Elemente. Solche leeren Stellen heißen Lücken (engl. holes) oder empty slots. In allen anderen Fällen werden die Argumente zu den Elementen des Arrays.

Der Konstruktor kann auch ohne new aufgerufen werden: Array(3) verhält sich genauso wie new Array(3). Im Alltag ist das Array-Literal [] aber fast immer die bessere Wahl. Es ist kürzer und eindeutiger und hat nicht die Sonderregel für ein einzelnes numerisches Argument.

Sinnvoll ist new Array(n) vor allem, wenn Sie ein Array fester Länge anlegen und sofort befüllen wollen, etwa mit fill() oder Array.from(). Wichtig: Methoden wie map(), forEach() und filter() überspringen Lücken. Sie müssen das Array also erst befüllen, bevor Sie diese Methoden nutzen.

Wenn Sie aus einzelnen Werten sicher ein Array erzeugen wollen, verwenden Sie Array.of(). Diese Methode hat die Sonderregel für einzelne Zahlen nicht.

Parameter

Name Typ Default Beschreibung
$...elements any Die Werte, mit denen das Array befüllt wird. Gilt nur, wenn Sie mehr als ein Argument übergeben oder das einzige Argument keine Zahl ist.
$arrayLength number 0 Wenn Sie nur ein Argument übergeben und dieses eine Ganzzahl zwischen 0 und 232 − 1 ist, wird ein Array mit dieser length und lauter Lücken erzeugt. Andere Zahlen (negativ, mit Nachkommastellen, zu groß) lösen einen RangeError aus.

Rückgabewert

Typ
Array
Beschreibung
Ein neues Array-Objekt, entweder mit den übergebenen Elementen oder mit der angegebenen Länge und lauter Lücken.

Beispiele

Array mit Elementen vs. Array mit Länge

const farben = new Array('rot', 'grün', 'blau');
const leer = new Array(3);
const einzelnerString = new Array('3');

console.log(farben);          // ['rot', 'grün', 'blau']
console.log(leer.length);     // 3
console.log(leer);            // [ <3 empty items> ]
console.log(einzelnerString); // ['3']
['rot', 'grün', 'blau'] 3 [ <3 empty items> ] ['3']

Array fester Länge vorbelegen (z. B. Wochentage-Zähler)

// Lücken zuerst mit fill() befüllen, sonst überspringt map() sie
const besucheProTag = new Array(7).fill(0);
besucheProTag[2] += 5;
besucheProTag[5] += 12;
console.log(besucheProTag);

// Ohne fill(): map() läuft über die Lücken hinweg
const falsch = new Array(3).map((_, i) => i);
console.log(falsch);
[0, 0, 5, 0, 0, 12, 0] [ <3 empty items> ]

Index-Liste für eine Paginierung erzeugen

const seitenAnzahl = 5;
// Array.from mit Länge + Mapping-Funktion statt new Array(n).map(...)
const seiten = Array.from({ length: seitenAnzahl }, (_, i) => i + 1);
console.log(seiten);

// Alternative mit Konstruktor und Spread (Spread macht Lücken zu undefined)
const seiten2 = [...new Array(seitenAnzahl)].map((_, i) => i + 1);
console.log(seiten2);
[1, 2, 3, 4, 5] [1, 2, 3, 4, 5]

Fehler bei ungültiger Länge abfangen

try {
  const kaputt = new Array(-1);
} catch (err) {
  console.log(err.name, '-', err.message);
}

// Array.of kennt die Sonderregel für Zahlen nicht
console.log(Array.of(-1)); // [-1]
console.log(Array.of(3));  // [3]
RangeError - Invalid array length [-1] [3]

// Wichtig · Fallstricke

  • Sonderregel bei einem einzelnen Zahlen-Argument: new Array(5) erzeugt kein [5], sondern ein Array mit 5 Lücken. Das ist ein häufiger Fehler, besonders wenn das Argument aus einer Variablen kommt, deren Typ nicht sicher ist. Nutzen Sie dafür Array.of() oder ein Literal.
  • RangeError: Negative Zahlen, Zahlen mit Nachkommastellen (new Array(2.5)) und Werte ab 232 lösen einen RangeError: Invalid array length aus.
  • Lücken sind nicht undefined: forEach, map, filter, some und for...in überspringen Lücken. for...of, der Spread-Operator und Array.from liefern dagegen undefined. Der Operator in gibt für eine Lücke false zurück: 0 in new Array(1) ergibt false.
  • Performance: Arrays mit vielen Lücken (sparse arrays) können von JavaScript-Engines wie V8 langsamer verarbeitet werden. Befüllen Sie das Array besser direkt, z. B. mit fill() oder Array.from().
  • fill() mit Objekten: new Array(3).fill({}) legt dreimal dasselbe Objekt ab. Für getrennte Objekte verwenden Sie Array.from({ length: 3 }, () => ({})).
  • Der Aufruf mit und ohne new ist gleichwertig. Der Konstruktor wird von allen Browsern und von Node.js unterstützt.