Es gibt einen Unterschied, einen ziemlich bedeutenden.
Die Array
Konstruktor entweder akzeptiert eine einzelne Zahl, die Länge des Arrays zu geben, und ein Array mit „leeren“ Indizes erstellt wird, oder genauer gesagt die Länge festgelegt ist, aber das Array wirklich nicht enthält alles
Array(3); // creates [], with a length of 3
Wenn sie mit einer Nummer als einziges Argument das Array Konstruktor aufrufen, erstellen Sie ein Array, das leer ist, und das kann nicht mit den üblichen Array Methoden wiederholt werden.
Oder ... der Array-Konstruktor akzeptiert mehrere Argumente, während ein Array erstellt wird, in dem jedes Argument ein Wert im Array ist
Array(1,2,3); // creates an array [1,2,3] etc.
Wenn Sie nennen diese
Array.apply(null, Array(3))
Es wird ein bisschen interessanter.
apply
nimmt die this
Wert als erstes Argument, und da es hier nicht sinnvoll ist, ist es auf null
Der interessante Teil ist das zweite Argument, wo ein leeres Array übergeben wird.
Als apply
ein Array akzeptieren würde es wie
Array(undefined, undefined, undefined);
Aufruf und das erstellt ein Array mit drei Indizes, die nicht leer sind, aber den Wert tatsächlich auf undefined
, weshalb ist es ca n iteriert werden.
TL; DR
Der Hauptunterschied besteht darin, dass Array(3)
ein Array mit drei Indizes erzeugt, die leer sind. Tatsächlich existieren sie nicht wirklich, das Array hat nur eine Länge von 3
.
Passing in einem solchen Array mit leeren Indizes an den Array-Konstruktor apply
Verwendung ist die gleiche wie Array(undefined, undefined, undefined);
tun, die mit drei undefined
Indizes ein Array erzeugt, und undefined
ist tatsächlich ein Wert ist, so dass es leer ist nicht wie in der ersten Beispiel.
Array-Methoden wie map()
können nur über tatsächliche Werte iterieren, nicht leere Indizes.
'Array.apply (null, Array (9))' ist * nicht * 'new Array (9) '. Es verteilt ein 'Array (9)' in 'Array()' als neun Parameter. Auch wenn es funktioniert, ist es ziemlich falsch. Zum Beispiel können Sie 'new Array (1e7)', aber nicht 'Array.apply (null, Array (1e7))'. – Sheepy
Related: http://StackOverflow.com/Questions/22949976/Why-does-Array-Applynull-ARGS-ACT-inConsistently-When-dealing-with-sparse-a – Sheepy