2015-03-25 13 views
5

W3 Schools saysPerché utilizzare "nuovo" per creare un array Javascript considerato negativo?

Queste due istruzioni differenti entrambi creare un nuovo array contenente 6 numeri:

var points = new Array(40, 100, 1, 5, 25, 10) // Bad 
var points =[40, 100, 1, 5, 25, 10];   // Good 

ma non danno una spiegazione perché il primo è cattiva.

Da quello che ho capito, l'unica differenza è che il primo chiama il costruttore. Qualcuno può indurmi a capire perché il primo è cattivo?

+1

Dove hai letto che è cattivo? – im1dermike

+2

Le scuole W3 hanno un sacco di informazioni errate e assolutamente errate. Non dovresti letteralmente andarci mai. – djechlin

+0

W3Schools è davvero una brutta risorsa, ma è giusto in questo caso. –

risposta

17

Il vero motivo è che questo costruttore è incoerente.

var points = new Array(40) 

crea un array di dimensione 40 e nessun contenuto mentre

var points = new Array(40, 50) 

crea un array di dimensione 2 con 2 elementi.

è solo più semplice e più leggibile da usare

var points = [40]; 

o

var points = [40, 50]; 

C'è anche motivo di usare questa funzione di costruzione quando si vuole costruire una matrice, basta usare un array letterale, esattamente come se tu stessi usando numeri letterali.

Utilizzare il costruttore Array solo quando si desidera creare un array vuoto con una determinata dimensione (che dovrebbe essere molto raro).

ES 2015 edit:

A causa di questa incoerenza, ES2015 ci ha portato una nuova funzione statica, Array.of. Array.of(40) rende l'array [40].

+0

Si può menzionare che la lunghezza dell'array può anche essere impostata dopo l'istanziazione di un array vuoto. Ad esempio 'var a = []; a.length = 50; '. – soyuka

+0

Beh ... sì, ma perché dovresti scriverlo? Preferirei usare 'new Array (50)' in questo caso specifico. –

+0

Il primo esempio a cui riesco a pensare sarebbe quello di fare una 'copia' di un array esistente per un confronto. [Usa il caso qui] (https://gist.github.com/soyuka/950371df21c0947535f3#file-concurrency-js-L11). È anche un modo per avere lo stesso comportamento di 'new Array (length)'. – soyuka

Problemi correlati