2009-07-07 10 views
56

JSLint mi sta dando questo errore:Che cos'è la notazione letterale della matrice in javascript e quando dovresti usarla?

Problem at line 11 character 33: Use the array literal notation [].

var myArray = new Array(); 

Qual è array notazione letterale e perché si vuole che io lo uso, invece?

Mostra qui che new Array(); dovrebbe funzionare bene ... c'è qualcosa che mi manca?

+0

Questo è simile a, ma non proprio lo stesso di: http://stackoverflow.com/questions/931872/whats-the-difference-between-array-and-while-declaring-a-javascript-arr/ – Borgar

+1

duplicato di [Cosa c'è di sbagliato con var x = new Array();] (http://stackoverflow.com/questions/885156/whats-wrong-with-var-x-new-array) – Bergi

+0

Usa sempre il letterale quando può perché il costruttore Array (new Array()) non funziona sempre correttamente. per esempio. se c'è un singolo valore che è un numero. > new Array (3, 11, 8) [3, 11, 8]> new Array (3) [,,,]> new Array (3.1) RangeError: lunghezza array non valida –

risposta

78

la notazione letterale di matrice è dove si definisce un nuovo array utilizzando solo parentesi vuote. Nel tuo esempio:

var myArray = []; 

E 'il modo "nuovo" di definire array, e suppongo che è più breve/più pulito.

Gli esempi che seguono spiegano la differenza tra loro:

var a = [],   // these are the same 
    b = new Array(), // a and b are arrays with length 0 

    c = ['foo', 'bar'],   // these are the same 
    d = new Array('foo', 'bar'), // c and d are arrays with 2 strings 

    // these are different: 
    e = [3],    // e.length == 1, e[0] == 3 
    f = new Array(3); // f.length == 3, f[0] == undefined 

Reference: What’s the difference between “Array()” and “[]” while declaring a JavaScript array?

+16

È il "nuovo" modo ... nessun gioco di parole? –

+3

Ma la risposta non spiega che quando dovremmo usare letteralmente i.e. [] e quando usare la nuova matrice(); –

+3

Usa sempre il letterale '[]'. La ragione per cui è meglio è che è più sicuro perché qualcuno potrebbe potenzialmente sovrascrivere il costruttore 'window.Array' ma non il letterale. – thwd

20

Vedi anche: What’s wrong with var x = new Array();

A parte l'argomento Crockford, credo che sia anche dovuto al fatto che le altre lingue hanno strutture di dati simili che utilizzano la stessa sintassi; ad esempio, Python has lists and dictionaries; vedere i seguenti esempi:

// this is a Python list 
a = [66.25, 333, 333, 1, 1234.5] 

// this is a Python dictionary 
tel = {'jack': 4098, 'sape': 4139} 

Non è forse pulito come Python è anche grammaticalmente corretto Javascript? (sì, mancano i punti e virgola finali, ma neanche quelli per Javascript)

Quindi, riutilizzando i paradigmi comuni nella programmazione, salviamo tutti dal dover imparare di nuovo qualcosa che non dovrebbe essere necessario.

+1

Grazie per la spiegazione. Bella risposta! –