Domanda

Ricordo di aver letto da qualche parte (penso che fosse in uno dei lavori di Crockford) che usare una matrice letterale [] è meglio che usare la notazione new Array (); .

Ma non ricordo davvero i vantaggi dell'uno rispetto all'altro.

Qualcuno può spiegarmi perché il primo è preferito al secondo?

Ecco un motivo per cui posso pensare al motivo per cui [] è meglio di new Array (); :

var Array = function () { };

L'override dell'oggetto Array interromperà il codice ...!

Altre ragioni?

È stato utile?

Soluzione

La brevità

Ha meno byte da trasferire sul filo, meno byte da interpretare, meno risorse mentali per analizzarlo.

Meno è di più.

Coerenza

Qual è la differenza tra queste due righe di codice?

var arr = [5];
var arr = new Array(5);

Secondo qui new Array (5); non restituirà un array con un 5, ma restituirà un array di 5 elementi, con tutti gli elementi non definiti . Considerando che queste due linee restituiscono matrici identiche.

var arr = [5,6];
var arr = new Array(5,6);

Altri suggerimenti

Una buona ragione è perché il costruttore di array ha un comportamento completamente non intuitivo. Ad esempio:

var a = new Array(5);
console.log(a.length); //prints "5"
console.log(a[0]); //prints "undefined"

var b = new Array(1,2);
console.log(b.length); //prints "2"
console.log(b[0]); //prints "1"

In questo caso, a finisce per essere un array di dimensioni 5 con tutti gli elementi non definiti, e b finisce per essere un array di dimensioni 2, con i valori [1,2].

var c = new Array("5");
console.log(c.length); //prints "1"
console.log(c[0]); //prints "5"

E qui finisci con un array a singolo elemento, contenente " 5 "

In generale, dovresti probabilmente non mai usare i costruttori su tipi incorporati in Javascript. Hanno tutti casi strani come questo. Ad esempio:

var s = new String("Hello");
var l = "Hello";
console.log(typeof(s)); // prints "object"
console.log(typeof(l)); // prints "string"

Elegance

Per dirla semplicemente sembra più bello ED è più facile per un programmatore analizzare, specialmente per strutture di dati più complicate:

var a = [
    ['a list', 'of', 'strings'],
    [1, 2, 3, 4],
    { hello: "This is an object property." }
];

Contro il metodo più maldestro orientato verso OOP:

var a = new Array();
var a2 = new Array();

a2.push('a list');
a2.push('of');
a2.push('strings');

var a3 = new Array();
a3.push(1);
a3.push(2);
a3.push(3);
a3.push(4);

var o = new Object();
o.hello = "This is an object property";
a.push(a2, a3, o);

new Array (1, 2, 3) anziché [1, 2, 3] è uguale a new String (" cow ") anziché "cow"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top