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?

Était-ce utile?

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"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top