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>
Ils font la même chose. Les avantages de la notation []
sont les suivants:
Array
, cela fonctionne toujours.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.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
:
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;
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.
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.
Je crois que les avantages en termes de performances sont négligeables.
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.