Ciò che è array notazione letterale in javascript e quando si dovrebbe utilizzare?
-
11-09-2019 - |
Domanda
JSLint mi sta dando questo errore:
Problemi alla riga 11 caratteri. 33: Usare la notazione letterale array []
var myArray = new Array();
Qual è array notazione letterale e perché si vuole che io lo uso, invece?
Si dimostra qui che new Array();
dovrebbe funzionare bene ... c'è qualcosa che mi manca?
Soluzione
array letterale notazione è dove si definisce un nuovo array utilizzando le parentesi solo vuote. Nel tuo esempio:
var myArray = [];
E 'il modo "nuovo" di definire array, e suppongo che è più breve / più pulita.
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
Riferimento : Qual è la differenza tra “Array ()” e “[]” pur dichiarando un JavaScript array?
Altri suggerimenti
Si veda anche: Cosa c'è di sbagliato con var x = new Array ();
A parte l'argomento Crockford, credo che sia anche dovuto al fatto che le altre lingue hanno strutture dati simili che si trovano ad utilizzare la stessa sintassi; per esempio, Python ha liste e dizionari ; 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 è pulito come Python è anche grammaticalmente corretto Javascript? (Sì, la desinenza punti e virgola sono mancanti, ma quelli non sono richiesti per Javascript, o)
Quindi, riutilizzando paradigmi comuni nella programmazione, risparmiamo tutti, da dover imparare di nuovo qualcosa che non dovrebbe essere necessario.
A parte l'argomento Crockford, jsPerf dice che è più veloce. http://jsperf.com/new-vs-literal-array-declaration
Dopo aver guardato @ecMode jsperf, ho fatto alcuni ulteriori test.
Quando si utilizza spinta per aggiungere alla matrice new Array () è notevolmente più veloce su Chrome:
http://jsperf.com/new-vs-literal-array- dichiarazione / 2
Utilizzo di indice per aggiungere è leggermente più veloce per [].