C'è una differenza, piuttosto significativa.
Il Array
costruttore sia accetta un singolo numero, dando la lunghezza della matrice, e si crea un array con indici "vuoti", o più correttamente la lunghezza è impostata ma l'allineamento in realtà non contiene nulla
Array(3); // creates [], with a length of 3
Quando si chiama il costruttore matrice con un numero come unico argomento, si crea una matrice che è vuota, e che non può essere iterato con i soliti metodi Array.
O ... la costruzione Array accetta diversi argomenti, mentre viene creato un array in cui ogni argomento è un valore nella matrice
Array(1,2,3); // creates an array [1,2,3] etc.
Quando si chiama questo
Array.apply(null, Array(3))
Diventa un po 'più interessante.
apply
accetta il valore this
come primo argomento, e come non è utile qui, è impostato per null
La parte interessante è il secondo argomento, dove un array vuoto viene passato in.
Come apply
accetta un array sarebbe come chiamare
Array(undefined, undefined, undefined);
e che crea un array con tre indici che non è vuota, ma hanno il valore effettivamente impostato undefined
, ed è per questo ca n essere iterato sopra.
TL; DR
La differenza principale è che Array(3)
crea un array con tre indici che sono vuoti. In realtà, non esistono realmente, l'array ha solo una lunghezza di 3
.
Passando in tale array con indici vuoti al costruttore Array utilizzando apply
è lo stesso facendo Array(undefined, undefined, undefined);
, che crea un array con tre undefined
indici, e undefined
è infatti un valore, quindi non vuota come nel primo esempio.
I metodi di array come map()
possono solo scorrere sui valori effettivi, non sugli indici vuoti.
'Array.apply (null, Array (9))' * non * 'new Array (9) '. Sta diffondendo un 'Array (9)' in 'Array()' come nove parametri. Anche se funziona, è praticamente il modo sbagliato. Ad esempio puoi 'new Array (1e7)' ma non 'Array.apply (null, Array (1e7))'. – Sheepy
correlate: http://stackoverflow.com/questions/22949976/why-does-array-applynull-args-act-inconsistently-when-dealing-with-sparse-a – Sheepy