2016-01-11 17 views
14

Come titolo, mi chiedo quale sia la differenza tra questi 3 metodi di inizializzazione di un array.Qual è la differenza tra Array.of (n), Array (n) e array = [n]?

In realtà sono più interessato al nuovo metodo Array.of() fornito da ES6, perché sentono i bisogni degli strumenti?

+0

ho già visto, forse la mia domanda era chiara sto cercando una spiegazione pratica dei casi d'uso, invece di una semplice documentazione di tagliare & incolla. @AmmarCSE grazie per questo comunque –

risposta

21

Il costruttore Array può essere richiamata in due modi: un elenco di valori da utilizzare come valori per gli elementi di matrice, oppure con un valore numerico che dà la lunghezza iniziale:

var myArray = new Array("hello", "world"); // 2 elements 
var otherArray = new Array(100); // 100 elements, all empty 

Poiché c'è un'ambiguità quando viene passato solo un numero, quella vecchia API è considerata mal progettata. Così, c'è Array.of(), che è la stessa della prima opzione per la costruzione Array:

var otherArray = Array.of(100); // 1 element 

Il terzo modo per rendere una matrice è con un'espressione di inizializzazione array:

var otherArray = [100]; // 1 element 

Le istanze di matrice che sono creati da ciascuno dei precedenti sono funzionalmente equivalenti e completamente intercambiabili.

Un'ultima cosa: perché deve esistere Array.of(), poiché è possibile utilizzare l'espressione di inizializzazione dell'array? Bene, Array.of() è una funzione, quindi può essere utilizzato come valore applicato nella programmazione in stile funzionale. (Come ad esempio un po 'muto) È possibile copiare un array con:

var copy = Array.of.apply(Array, original); 

Una ragione che è muto è che c'è anche (in ES2015) Array.from() a fare la stessa cosa:

var copy = Array.from(original); 

Che lavora su qualsiasi tipo di originale iterabile, quindi è un buon modo per trasformare arguments o NodeList in un array.

Il MDN site ha la documentazione su Array.of(). Il costruttore e il modulo di inizializzazione dell'array sono in circolazione da sempre, quindi qualsiasi riferimento JavaScript coprirà quelli (sebbene possibilmente senza riferimento a Array.of()).

+1

@thefourtheye oh, hai sparato hai ragione :) Dovrei farlo facendo una versione vincolata di '.apply()' (a '.of') e poi legalo a' Array' e questo è un po 'strano per un esempio inutile. – Pointy

+0

potremmo anche aggiungere alcuni link di riferimento alla tua risposta solo per renderla più completa. Qualcosa come [questo] (https://gist.github.com/rwaldron/1074126) sembra utile @Pointy –

+0

Buona idea. Vale anche la pena notare che Internet Explorer ora non supporta i nuovi metodi ES2015. – Pointy

3

Array.of(2) creerà un array con l'elemento 2.

var temp = Array.of(2); // temp = [2] 

Array(2) creerà una matrice di 2 elementi.

var temp = new Array(2); // temp = [undefined, undefined] 

temp = [2] creerà un array con l'elemento 2.

var temp = [2]; // temp = [2] 
Problemi correlati