Hallo Christian,
führe dies hier mal in der Browserconsole aus (let/const/var ist da wurscht):
new Array(3).forEach( (val, i) => console.log(i, val) );
[5,6,7].forEach( (val, i) => console.log(i, val) );
WTF? Ein Array-Element kann gefüllt oder leer sein. Leer ist was anderes als NaN oder undefined. new Array(n) erzeugt n leere Einträge. forEach überspringt leere Einträge. Darum gibt die erste Zeile nichts aus.
D.h. in deinem ersten Versuch wird der Callback nullmal aufgerufen.
Ein Spread kopiert das Array und erzeugt pro Eintrag Werte. Auch für die leeren.
a = [];
a[4] = 7;
console.log(a); // empty x 4, 7
console.log([... a]); // undefined, undefined, undefined, undefined, 7
Deswegen klappt's nach dem Spread.
Rolf
--
sumpsi - posui - obstruxi
sumpsi - posui - obstruxi