En JavaScript, pourquoi [] est préféré à new Array () ;?
-
05-07-2019 - |
Question
Je me souviens avoir lu quelque part (je pense que c'était dans l'un des articles de Crockford) que l'utilisation d'un littéral de tableau []
est préférable à l'utilisation de la notation new Array ();
.
Mais je ne me souviens pas vraiment des avantages de l'un par rapport à l'autre.
Quelqu'un peut-il m'expliquer s'il vous plaît pourquoi le premier est préféré au second?
Voici une des raisons pour lesquelles []
est supérieur à new Array ();
:
var Array = function () { };
Remplacer l'objet Array
cassera le code ...!
D'autres raisons?
La solution
brièveté
Il y a moins d'octets à transférer sur le réseau, moins d'octets à interpréter, moins de ressources mentales pour l'analyser.
Moins, c'est plus.
Cohérence
Quelle est la différence entre ces deux lignes de code?
var arr = [5];
var arr = new Array(5);
Selon ici nouvelle Array (5);
ne renverra pas un tableau contenant un 5 mais plutôt un tableau de 5 éléments, tous les éléments étant undefined
. Alors que ces deux lignes renvoient des tableaux identiques.
var arr = [5,6];
var arr = new Array(5,6);
Autres conseils
Une bonne raison est que le constructeur Array a un comportement totalement non intuitif. Par exemple:
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"
Dans ce cas, a finit par être un tableau de taille 5 avec tous les éléments indéfinis, et b finit par être un tableau de taille 2, avec les valeurs [1,2].
var c = new Array("5");
console.log(c.length); //prints "1"
console.log(c[0]); //prints "5"
Et ici, vous vous retrouvez avec un tableau à un seul élément contenant "5"
En général, vous devriez probablement ne jamais utiliser les constructeurs sur les types intégrés en Javascript. Ils ont tous des cas étranges comme celui-ci. Par exemple:
var s = new String("Hello");
var l = "Hello";
console.log(typeof(s)); // prints "object"
console.log(typeof(l)); // prints "string"
Élégance
Pour le dire simplement, il a l'air plus joli ET est plus facile à analyser pour un programmeur, en particulier pour les structures de données plus compliquées:
var a = [
['a list', 'of', 'strings'],
[1, 2, 3, 4],
{ hello: "This is an object property." }
];
Versus de la méthode orientée POO plus maladroite:
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)
au lieu de [1, 2, 3]
est identique à new String ("vache")
au lieu de "vache"