Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

151
Visualizações
for...of no enumera todos los objetos iterables

Tengo un código de muestra tomado de

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration#for...in_statement

(y solo un poco modificado)

No entiendo por qué el bucle for..of no registra 3, 'myStr', 5, 7, 'hello' (no registra 'hello' ), mientras que el bucle for..in SÍ registra todos los enumerables de arr 0, 1, 2, 3, foo

 const arr = [3, 'myStr', 5, 7]; arr.foo = 'hello'; for (let i in arr) { console.log(i); // logs "0", "1", "2", "3", "foo" } console.log("------"); for (let i of arr) { console.log(i); // logs 3, 'myStr', 5, 7 } console.log("------"); console.log(arr); // logs [ 3, 'myStr', 5, 7, foo: 'hello' ] console.log("------");

¡Cualquier ayuda apreciada!

( EDITAR: cuando presiona "> Ejecutar fragmento de código" ( stackoverflow ) no registra lo mismo que node.js (motor V8 de Google )

Node.js instalado en los registros de mi computadora:

 [ 3, "myStr", 5, 7, foo: "hello" ]

"> Ejecutar fragmento de código" (de stackoverflow) registra:

 [ 3, "myStr", 5, 7 ]

Entonces, tal vez algunas respuestas no sean correctas/precisas.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

El bucle for ... of es un método que asigna cada elemento del Array y almacena el valor de ese elemento en una variable (en este caso, i ).

El bucle for ... in es un método para mapear cada elemento en el Array y almacena la clave en la variable i (que en este caso es el índice del elemento).

Ayuda a comprender que una matriz es simplemente un objeto con claves / propiedades numéricas, por lo que mientras que la matriz parece ser esto:

[3, "myStr", 5, 7]

Es, de hecho, esto:

 { 0: 3, 1: "myStr", 2: 5, 3: 7 }
about 4 years ago · Juan Pablo Isaza Relatório

0

Desafortunadamente, no creo que su propiedad "foo" se considere técnicamente "iterable" en el contexto de la matriz de JavaScript a la que la asignó.

Cada tipo de objeto iterable, incluidos los incorporados como Array, puede definir su propio método para determinar qué valores vienen a continuación en una iteración. Entonces, el mecanismo que se mueve de un valor al siguiente durante for...of no está estrictamente ligado a las propiedades asignadas al objeto, como lo está for...in .

Dicho esto, si está realmente interesado en jugar con el protocolo de iteración de JavaScript, esta funcionalidad le permite crear sus propios iterables que expresan el comportamiento de iteración que espera lograr aquí. Si simplemente espera acceder a una lista de valores asociados con los nombres de propiedades de los objetos, el antiguo bucle for...in en el que accede a cada valor por nombre de propiedad es probablemente el enfoque más fácil.

EDITAR: veo su edición anterior sobre la diferencia entre la salida de registro del fragmento de código y la consola de su nodo. Le insto a que no se obsesione demasiado con esta discrepancia, ya que es posible que el comportamiento específico de la implementación de console.log no refleje completamente las estructuras que están registrando. El siguiente fragmento amplía su experimento inicial para ilustrar la diferencia entre "estructura de matriz iterable" y "estructura de objeto no iterable":

 const arr = [3, 'myStr', 5, 7]; arr.foo = 'hello'; // Here's the array structure, // note that it lacks the "foo" property assigned to the "arr" object. console.log('Array structure: ', arr); // Here's the ".length" property of arr, // which shows the number of iterable items in its array structure. console.log('Array length property: ', arr.length); // Here is the list of in the arr object, // Including the array indices, and "foo". console.log('Object keys in "arr" object: ', Object.keys(arr)); // Here's the '.length' property of arr's object key list. console.log('Number of keys in "arr" object: ', Object.keys(arr).length);

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda