2009-12-11 10 views

Respuesta

10

es porque estás bucle a través de la matriz mediante for...in que se utiliza generalmente para recorrer sobre las propiedades de los objetos. Es probable que el motor de JavaScript esté enviando a una cadena porque el tipo de cadena es adecuado para los nombres de las propiedades del objeto.

probar este enfoque más tradicional:

stuff = []; 
stuff[0] = 3; 

for(var i=0; i<stuff.length; i++) { 
    var x = stuff[i]; 
    alert(typeof x); 
} 
+1

Gracias por la ayuda rápida Asaph! –

+0

@Mike Cantelon: No hay problema :) – Asaph

+1

@Mike, haga clic en la marca de verificación para aceptar esta respuesta. –

5

for..in no está diseñado para iterar sobre matrices. Use un estilo C para bucle en su lugar.

Referencia: MDC

4

El for .. in bucle en itera Javascript través de los propiedades del objeto. En Javascript, los nombres de propiedades son cadenas y las matrices son solo objetos con un conjunto de propiedades que parecen ser números.

3

La declaración for...in se debe utilizar para iterar sobre las propiedades del objeto , para Arrays utilizan un simple bucle for:

var stuff = []; 
stuff.push(3); 

for(var i = 0; i < stuff.length; i++) { 
    alert(stuff[i]); 
} 

¿Por qué no debería usar for...in con matrices?

  1. Se arrastra la cadena de prototipos, se iterar sobre las propiedades definidas en el Array.prototype o Object.prototype.
  2. El orden de iteración es no garantizado de todos modos.

Más detalles sobre una pregunta recientemente contestado:

0

El problema es que es muy fácil de JavaScript para cambiar a matrices asociativas, que son, de hecho, no matrices, pero objetos. Sin embargo, el bucle for..in funciona en objetos, cuyos índices son cadenas.

2

Evite la falsificación en las funciones performance-critical.

  • The for-in loop requires the script engine to build a list of all the enumerable properties, y verifique si hay duplicados en esa lista, antes de que pueda comenzar la enumeración.
  • The for-in loop breaks when you extend Array object using prototype.
Cuestiones relacionadas