objeto objects eliminar elemento array javascript foreach typeof

objects - Al iterar sobre valores, ¿por qué typeof(value) devuelve "string" cuando value es un número? Javascript



ng repeat key value filter (1)

Estoy usando Google Chrome para esta prueba: al contrario de la intuición, el primer ciclo alerta "cadena" 3 veces, mientras que el segundo ciclo alerta "número" 3 veces.

numarray = [1, 2, 3]; //for-each loop for(num in numarray) alert(typeof(num)); //standard loop for(i=0; i<numarray.length; i++) alert(typeof(numarray[i]));

Esperaba que ambos bucles alertaran al "número" 3 veces. ¿Cómo se implementa el primer ciclo en Javascript? En otras palabras, si el for-each es azúcar sintáctico, ¿cuál es su equivalente al usar un ciclo estándar?

Además, ¿hay alguna forma de iterar sobre el espacio de nombres de un objeto utilizando un ciclo estándar? Estoy buscando tocar cada uno de los métodos y atributos de un objeto usando un bucle del segundo tipo. Soy nuevo en Javascript y cualquier ayuda es muy apreciada, gracias.


La razón por la que está viendo "cadena" en su primer ciclo es que num hace referencia al índice de matriz , no al valor de numarray en ese índice. Intenta cambiar tu primer ciclo para alertar num lugar de typeof num y verás que escupe 0, 1 y 2, que son los indicios y no los valores de tu matriz.

Cuando utiliza un bucle for in , está iterando sobre las propiedades de un objeto, que no es exactamente equivalente al bucle for en su segundo ejemplo. Las matrices en JavaScript son en realidad solo objetos con números secuenciales como nombres de propiedad. Se tratan como cadenas en lo que se refiere a typeof .

Editar:

Como señala Matthew, no está garantizado que obtenga los elementos en la matriz en un orden particular cuando usa un ciclo for in , y en parte por esa razón, no se recomienda iterar a través de las matrices de esa manera.

filip-fku pregunta cuándo sería útil usar for in , dado este comportamiento. Un ejemplo es cuando los nombres de las propiedades en sí tienen un significado, que no es realmente el caso con las indices de matriz. Por ejemplo:

var myName = { first: ''Jimmy'', last: ''Cuadra'' }; for (var prop in myName) { console.log(prop + '': '' + myName[prop]); } // prints: // first: Jimmy // last: Cuadra

También vale la pena señalar que for in bucles for in también se recorrerán las propiedades de la cadena de prototipos del objeto. Por esa razón, generalmente es la forma en que le gustaría construir un bucle for in :

for (var prop in obj) { if (obj.hasOwnProperty(prop)) { // do something } }

Esto verifica si la propiedad fue definida por el objeto en sí y no un objeto heredado a través de la cadena de prototipos.