Définissant tableau dans javascript

Donc je veux créer un tableau en javascript et je me souviens de deux façons de le faire, alors je veux juste savoir quelles sont les différences fondamentales et s'il existe une différence de performance dans 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> 

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

  • C'est plus court.
  • Si quelqu'un fait quelque chose de stupide comme redéfinir le symbole Array , ça marche toujours.
  • Il n'y a pas d'ambiguïté lorsque vous ne définissez qu'une seule entrée, alors que lorsque vous écrivez une new Array(3) , si vous avez l'habitude de voir les entrées répertoriées dans le constructeur, vous pouvez facilement interpréter ce qui signifie [3] , en fait, il crée Un nouveau tableau avec une length de 3 et aucune entrée.
  • Il peut être un peu plus rapide (en fonction de la mise en œuvre de JavaScript), car lorsque vous dites un new Array , l'interpréteur doit rechercher le symbole Array , ce qui signifie traverser toutes les entrées de la chaîne de portée jusqu'à ce qu'il atteigne l'objet global et Le trouve, alors qu'avec [] il n'a pas besoin de le faire. Les chances d'avoir un impact tangible sur le monde réel dans les cas d'utilisation normale sont faibles. Pourtant, cependant …

Donc, il existe plusieurs bonnes raisons d'utiliser [] .

Avantages pour un new Array :

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

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

 var a = []; a.length = 3; 

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

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

Cette référence sur JSPerf montre que le format littéral du tableau est généralement plus rapide que le constructeur sur certains navigateurs (et pas plus lent sur aucun).

Ce comportement est évidemment totalement dépendant de l'implémentation, donc vous devrez exécuter votre propre test sur vos propres plateformes cibles.

Je crois que les avantages pour la performance sont négligeables.

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

Je pense que les deux façons sont les mêmes en termes de performance puisqu'elles créent à la fois un «objet Array». Donc, une fois que vous commencez à accéder au tableau, le mécanisme sera le même. Je ne suis pas trop sûr de la manière dont les mécanismes de construction des tableaux sont différents (en termes de performances), mais il ne devrait pas y avoir de gains perceptibles en utilisant l'un ou l'autre sens.