web-dev-qa-db-fra.com

Qu'est-ce que la notation littérale des tableaux en javascript et quand devez-vous l'utiliser?

JSLint me donne cette erreur:

Problème à la ligne 11, caractère 33: utilisez la notation littérale du tableau [].

var myArray = new Array();

Qu'est-ce que la notation littérale d'un tableau et pourquoi veut-il que je l'utilise à la place?

Cela montre ici que new Array(); devrait bien fonctionner ... y a-t-il quelque chose qui me manque?

63
Matt

la notation littérale du tableau est l'endroit où vous définissez un nouveau tableau en utilisant uniquement des crochets vides. Dans votre exemple:

var myArray = [];

C'est la "nouvelle" façon de définir les tableaux, et je suppose que c'est plus court/plus propre.

Les exemples ci-dessous expliquent la différence entre eux:

var a = [],            // these are the same
    b = new Array(),   // a and b are arrays with length 0

    c = ['foo', 'bar'],           // these are the same
    d = new Array('foo', 'bar'),  // c and d are arrays with 2 strings

    // these are different:
    e = [3],             // e.length == 1, e[0] == 3
    f = new Array(3);   // f.length == 3, f[0] == undefined

Référence : Quelle est la différence entre "Array ()" et "[]" lors de la déclaration d'un tableau JavaScript?

91
CookieOfFortune

Voir aussi: Quel est le problème avec var x = new Array ();

Mis à part l'argument de Crockford, je crois qu'il est également dû au fait que d'autres langages ont des structures de données similaires qui utilisent la même syntaxe; par exemple, Python a des listes et des dictionnaires ; voir les exemples suivants:

// this is a Python list
a = [66.25, 333, 333, 1, 1234.5]

// this is a Python dictionary
tel = {'jack': 4098, 'sape': 4139}

N'est-ce pas bien comment Python est aussi Javascript grammaticalement correct? (Oui, les points-virgules de fin sont manquants, mais ceux-ci ne sont pas requis pour Javascript non plus))

Ainsi, en réutilisant des paradigmes communs dans la programmation, nous évitons à tout le monde d'avoir à réapprendre quelque chose qui ne devrait pas l'être.

23
ken

Mis à part l'argument de Crockford, jsPerf dit que c'est plus rapide. http://jsperf.com/new-vs-literal-array-declaration

3
ecMode

Après avoir regardé @ecMode jsperf, j'ai fait d'autres tests.

Lorsque vous utilisez Push pour ajouter au tableau, le nouveau tableau () est considérablement plus rapide sur Chrome:

http://jsperf.com/new-vs-literal-array-declaration/2

L'utilisation d'index pour ajouter est légèrement plus rapide pour [].

0
Skeep