Signatur
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
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']
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);
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);
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]
// 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ürArray.of()oder ein Literal. RangeError: Negative Zahlen, Zahlen mit Nachkommastellen (new Array(2.5)) und Werte ab 232 lösen einenRangeError: Invalid array lengthaus.- Lücken sind nicht
undefined:forEach,map,filter,someundfor...inüberspringen Lücken.for...of, der Spread-Operator undArray.fromliefern dagegenundefined. Der Operatoringibt für eine Lückefalsezurück:0 in new Array(1)ergibtfalse. - 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()oderArray.from(). fill()mit Objekten:new Array(3).fill({})legt dreimal dasselbe Objekt ab. Für getrennte Objekte verwenden SieArray.from({ length: 3 }, () => ({})).- Der Aufruf mit und ohne
newist gleichwertig. Der Konstruktor wird von allen Browsern und von Node.js unterstützt.