Esta lógica de Javascript me desconcierta. Estoy creando una matriz y estableciendo el primer elemento en un número. Cuando lo intento usando un bucle "for" Javascript convierte la clave de la matriz en una cadena. ¿Por qué? Quiero que siga siendo un número.

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

for(var x in stuff) {
    alert(typeof x);
}
7
user229407 11 dic. 2009 a las 09:24

5 respuestas

La mejor respuesta

Es porque estás recorriendo la matriz usando for...in, que generalmente se usa para recorrer las propiedades de los objetos. El motor de JavaScript probablemente esté convirtiendo en una cadena porque el tipo de cadena es adecuado para los nombres de las propiedades del objeto.

Pruebe este enfoque más tradicional:

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

for(var i=0; i<stuff.length; i++) {
    var x = stuff[i];
    alert(typeof x);
}
11
Asaph 11 dic. 2009 a las 23:29

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

0
poke 11 dic. 2009 a las 06:33

Evite for-in en funciones de rendimiento crítico.

  • 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.
2
pramodc84 11 dic. 2009 a las 06:47

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

4
Greg Hewgill 11 dic. 2009 a las 06:30

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

Referencia: MDC

5
jonchang 11 dic. 2009 a las 06:29