2010-05-31 11 views

risposta

13

Potrebbe essere perché l'oggetto Array può essere sovrascritto in JavaScript ma la notazione letterale dell'array non può. Vedere this answer per un esempio

+3

Questo dipende per implementazione però. Almeno in passato [] utilizzava il costruttore di Array in alcuni motori JS (iirc era un po 'confuso sugli script che erano in grado di catturare la creazione di array per le richieste JSONP sovrascrivendo il costruttore di array). –

+0

@reko_t - questo è molto vero. So che in Firefox il letterale dell'array non usa il costruttore Array, non è sicuro degli altri (non c'è modo di verificare al momento, qualcuno potrebbe confermare?) –

+0

Qualcuno potrebbe risolvere il collegamento per favore? L'editing di iPhone è complicato :) –

11

Si noti inoltre che facendo:

var x = [5]; 

è diverso da fare:

var x = new Array(5); 

Il primo crea un inizializza un array con un elemento con un valore pari a 5. Più tardi crea un'inizializzazione di una matrice con 5 elementi non definiti.

+11

E, per renderlo più divertente, 'new Array (1, 2)' è uguale a '[1, 2]'. –

3

E 'meno di battitura, che nel mio libro vince sempre :-)

Una volta ho fissato uno strano bug su una delle nostre pagine. La pagina voleva creare un elenco di chiavi numeriche del database come un array Javascript. Le chiavi erano sempre numeri interi grandi (un bit alto era sempre impostato come indicatore). Sembrava il codice originale:

var ids = new Array(${the.list}); 

Bene, indovina cosa è successo quando la lista aveva un solo valore?

var ids = new Array(200010123); 

che significa "creare un array e inizializzarlo in modo che ci siano 200 milioni di voci vuote".

+0

In realtà è 20. – BalusC

+0

oh beh, qualsiasi cosa - non riesco a ricordare esattamente come fossero gli ID, ma era abbastanza grande da causare un esaurimento immediato della memoria – Pointy

1

In genere un array letterale (var a = [1,2,3] o a = []) è la strada da percorrere.

Ma una volta ogni tanto è necessario un array in cui la lunghezza stessa è la caratteristica di definizione della matrice.

var A = Array (n) sarebbe (utilizzando un letterale) necessita di due expressions-

var A = []; A.length = n;

In ogni caso, non è necessario l'operatore 'nuovo' con il costruttore Array, , non nel modo in cui è necessario 'nuovo' con un nuovo oggetto Date, ad esempio.

1

Per creare array senza Lunghezza

var arr = []; 

Per creare array con la lunghezza in modo più dinamico

var arr; 
(arr = []).length = 10; // 10 is array length 

Per creare array con lunghezza inferiore dinamicamente

var arr = []; 
arr.length = 10; 
Problemi correlati