2009-06-10 7 views
18

Supongamos que tengo un objeto JavaScript que se inicializaiteración orden de bucles for..in en Javascript

var letters = {q:0, t:0, o:0, b:0, y:0, n:0, u:0, m:0, p:0, 
       w:0, a:0, d:0, k:0, v:0, c:0, z:0, l:0, j:0, 
       i:0, e:0, g:0, s:0, x:0, r:0, h:0, f:0}; 

y luego quiero para iterar sobre las claves de este objetos

for(var letter in letters) { 
    // code goes here 
} 

En tanto Firefox 3 e Internet Explorer 8 los objetos se repiten en el orden en que se enumeran en la declaración del objeto (q, t, o, b, y, etc.).

¿Puedo confiar en esto? Supongamos que no modifico mi objeto de ninguna manera antes de la iteración. ¿Es parte del estándar ECMAScript? ¿Alguien sabe qué navegadores iterar en el orden declarado?

+3

Dup: http://stackoverflow.com/questions/919027/are-object-variables-in-javascript-enumerated-in-the-order-they-were-added y http://stackoverflow.com/questions/280713/elements-order-for-in-loop-in-javascript –

Respuesta

13

No, no se puede confiar en, al menos not in Firefox:

A para ... en itera bucle sobre las propiedades de un objeto en un orden arbitrario.

+2

En realidad, en Firefox puede confiar en esto, pero no en Chrome; vea http://stackoverflow.com/questions/280713/elements-order-for-in-loop-in-javascript – doekman

+3

No debe depender de un orden reproducible en ningún navegador. La orden viene dada por la implementación actual, pero puede cambiar en cualquier momento. El documento vinculado de Mozilla llama explícitamente a la orden arbitraria. –

1

La orden se define en las especificaciones como "arbitraria", por lo que no; no debes confiar en que el orden sea definitivo.

2

Para garantizar un orden particular para procesar las propiedades de un objeto en un bucle for-in, deberá definir un orden de clasificación o método de lista para el objeto. Si define todas las propiedades cuando crea el objeto, una matriz de nombres de propiedad funcionará, pero si puede agregar o eliminar propiedades, se requiere un método.

Si la orden de procesamiento es esencial por alguna razón, una matriz puede ser preferible.

Cuestiones relacionadas