In JavaScript, perché [] è preferito al nuovo array () ;?
-
05-07-2019 - |
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?
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"