907 votes

L'ordre de propriété d'objet de garantie JavaScript est-il valide?

Si je crée un objet comme celui-ci:

 var obj = {};
obj.prop1 = "Foo";
obj.prop2 = "Bar";
 

L'objet résultant ressemblera-t-il toujours à ceci?

 { prop1 : "Foo", prop2 : "Bar" }
 

Autrement dit, les propriétés seront-elles dans le même ordre que je les ai ajoutées?

698voto

bpierre Points 2437

Non, les propriétés de l'ordre dans les objets ne sont pas garantis en JavaScript, vous devez utiliser un Array.

Définition d'un Objet à partir d' ECMAScript Troisième Édition (pdf):

4.3.3 Objet
Un objet est un membre de la type d'Objet. C'est une collection non ordonnée de propriétés de chacune contient une valeur primitive, de l'objet ou fonction. Une fonction stockée dans un propriété d'un objet est appelé un la méthode.

298voto

Dave Dopson Points 16690

Le meilleur lien ci-dessus est dans Tim en Bas du commentaire:

http://code.google.com/p/v8/issues/detail?id=164

Ce bug qui couvre en détail les décisions de conception impliqués pour google Chrome, la mise en œuvre de la commande de clés. Un take-away, c'est que pour la chaîne de clés de ne pas analyser à un entier (c'est à dire "a" ou "b", mais PAS "3"), les touches sont imprimées dans l'ordre d'insertion sur tous les principaux navigateurs et alors que ce comportement n'est pas "normalisé", il EST considéré comme une importante vers l'arrière-problème de compatibilité par les éditeurs de navigateurs. Utilisez à vos propres risques.

Par l'un des (plutôt opinions) commentaires:

Les normes de toujours suivre les implémentations, c'est là que XHR est venu, et Google fait la même chose par la mise en œuvre des Engrenages et puis embrassant équivalent HTML5 fonctionnalité. Le droit fixe est d'avoir ECMA officiellement incorporer le standard de facto de comportement dans la prochaine rev de la spécification.

Si vous comptez sur l'ordre d'insertion, vous êtes à l'extérieur de l'ECMAScript spec, mais dans le standard de facto de la commune de comportement du navigateur (aussi LONGTEMPS QUE VOS CLÉS de N'ANALYSER QUE les ENTIERS!).

78voto

Alnitak Points 143355

En l'occurrence, la plupart des navigateurs renvoient des propriétés dans le même ordre que celui dans lequel ils ont été insérés, mais il ne s'agit pas explicitement d'un comportement garanti, vous ne devriez donc pas vous y fier.

En particulier, voir la section 12.6.4 de la spécification ECMAScript :

La mécanique et l'ordre d'énumération des propriétés ... n'est pas spécifié.

-6voto

lacqui Points 3797

De la norme JSON :

Un objet est une collection non ordonnée de zéro ou plusieurs paires nom / valeur, où un nom est une chaîne et une valeur est une chaîne, un nombre, un booléen, un NULL, un objet ou un tableau.

(emphase mienne).

Donc, non, vous ne pouvez pas garantir la commande.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X