Hallo Christian,
new Array(3); // erzeugt: [,,]
Keine Ahnung wie man sowas korrekt darstellt, aber ja, so ist es.
Arrays und Objekte sind ja letztlich zwei Sichten auf das gleiche Ding. Fasst man das Array als Objekt auf, dann erzeugt new Array(3) ein Objekt mit Array-Prototyp und einem einzigen Property: length. Dieses Property ist nicht enumerable, d.h. eine for...in Schleife beachtet es nicht.
[... new Array(3)] macht einen Spread davon, das Ergebnis ist ein Objekt mit Array-Prototyp und vier Properties. length: 3, 0: undefined, 1: undefined, 2: undefined.
Ein Blick auf die Chrome-Konsole macht es vielleicht auch nochmal klarer:
Da steht proto: Object, aber das heißt nicht, dass der Prototyp dieser Array-Objekte das
Object` Objekt ist. Sondern dass der Prototyp ein Objekt ist. Und zwar das Prototyp-Objekt des Array-Konstruktors.
Object.getPrototypeOf([...new Array(3)]) == Array.prototype
meldet true. Prototypen sind die JavaScript-Methode, um Objektklassen zu bilden. Unser Wiki kann was davon erzählen.
Rolf
sumpsi - posui - obstruxi