web-dev-qa-db-fra.com

définir un tableau en javascript

je veux donc créer un tableau en javascript et me rappeler deux façons de le faire. Je veux juste savoir quelles sont les différences fondamentales et s'il existe une différence de performances entre ces deux "styles".

<script type="text/javascript">
    var array_1 = new Array("fee","fie","foo","fum");
    var array_2 = ['a','b','c'];

    for (i=0;i<array_1.length;i++){
     document.write(array_1[i] + "<br />");
    }

    for (i=0;i<array_2.length;i++){
        document.write(array_2[i] + "<br />");
    }
</script> 
25
mcgrailm

Ils font la même chose. Les avantages de la notation [] sont les suivants:

  • C'est plus court.
  • Si quelqu'un fait quelque chose de stupide comme redéfinir le symbole Array, cela fonctionne toujours.
  • Il n'y a pas d'ambiguïté lorsque vous ne définissez qu'une seule entrée, alors que lorsque vous écrivez new Array(3), si vous êtes habitué à voir les entrées répertoriées dans le constructeur, vous pouvez facilement mal interpréter cela en signifiant [3], alors qu'en réalité, il crée un nouveau tableau avec un length de 3 et pas d'entrées.
  • Cela peut être un un tout petit peu} plus rapide (selon l'implémentation de JavaScript), car lorsque vous dites new Array, l'interpréteur doit rechercher le symbole Array, ce qui signifie parcourir toutes les entrées de la chaîne de portée jusqu'à ce qu'il soit obtenu à l'objet global et le trouve, alors qu'avec [] il n'est pas nécessaire de le faire. Les chances que cela ait un quelconque {impact concret réel} dans les cas d'utilisation normaux sont faibles. Mais quand même ...

Il y a donc plusieurs bonnes raisons d'utiliser [].

Avantages à new Array:

  • Vous pouvez définir la longueur initiale du tableau, par exemple, var a = new Array(3);.

Je n'ai aucune raison de le faire depuis plusieurs années (pas depuis que j'ai appris que les tableaux ne sont pas vraiment des tableaux et il est inutile d'essayer de les pré-allouer). Et si vous le voulez vraiment, vous pouvez toujours le faire:

var a = [];
a.length = 3;
43
T.J. Crowder

Il n'y a pas de différence dans votre utilisation.

La seule différence d'utilisation réelle est de passer un paramètre entier à new Array() qui définira une longueur de tableau initiale (ce que vous ne pouvez pas faire avec la notation [] tableau-littéral). Mais ils créent des objets identiques dans les deux cas dans votre cas d'utilisation.

4
davin

Ce benchmark sur JSPerf montre que la forme littérale d'un tableau est généralement plus rapide que le constructeur de certains navigateurs (et pas plus lente sur aucun).

Bien entendu, ce comportement dépend totalement de la mise en œuvre. Vous devez donc exécuter votre propre test sur vos propres plates-formes cibles.

3
maerics

Je crois que les avantages en termes de performances sont négligeables.

Voir http://jsperf.com/new-array-vs-literal-array/4

0
troynt

Je pense que les deux sens sont les mêmes en termes de performances car ils créent tous les deux un "objet Array". Donc, une fois que vous aurez commencé à accéder au tableau, le mécanisme sera le même. Je ne sais pas trop à quel point les mécanismes de construction des tableaux sont différents (en termes de performances) bien qu'il ne devrait pas y avoir de gains notables en utilisant une voie à l'autre.

0
Urjit