Die ersten beiden und das dritte Beispiel sind gleichwertig, sie ergeben am Ende eine Array
Objekt mit nur einem eigenes Grundstück , length
mit 5
als seinen Wert.
Wenn Sie die Array
Konstruktor mit einem einzigen numerischen Argument (wie Array(5);
), enthält das neu erstellte Objekt diese Zahl als seine length
Eigenschaft, die Index-Eigenschaften werden nicht erstellt:
var a = Array(5);
a.hasOwnProperty('0'); // false
Das zweite Beispiel ergibt genau dasselbe:
var a = [];
a.length = 5;
a.hasOwnProperty('0'); // false
Das dritte Beispiel ist nicht äquivalent, da es eine Eigenschaft auf dem Array-Objekt erstellt, obwohl der Wert undefined
:
var a = []; a[4] = undefined;
a.hasOwnProperty('4'); // true
Das vierte Beispiel:
var a = new Array(5);
ist genau dasselbe wie die zweite ( var a = Array(5);
), gibt es keinen Unterschied zwischen der Verwendung der Array
Konstruktor mit oder ohne die new
Operator, im zweiten Beispiel sind Sie Aufruf der Array
Konstruktor als Funktion .
Und schließlich, über Ihre makeArrayToLength
Funktion ist, wie Sie sicher wissen, überhaupt nicht gleichwertig, da alle "Indexeigenschaften" auf einen "Standardwert" initialisiert werden. (Benutzen Sie übrigens nicht <code>default</code> als Bezeichner, es ist ein Schlüsselwort...)
En Array
Konstruktor wird in der Regel vermieden, weil er sich je nach verwendetem Argument unterschiedlich verhalten kann, zum Beispiel:
Array("5"); // one element array, (["5"])
Array(5); // empty array, length = 5
// v.s.
["5"] // one element array
[5] // one element array
Auch die Array
Konstruktor kann überschrieben werden, während Array-Literale immer funktionieren werden.