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

235
Visualizações
¿Por qué no puedo reasignar esta variable dentro de una declaración if usando Javascript?

Estoy experimentando un comportamiento extraño que creo que está relacionado con el alcance, pero no puedo explicar por qué sucede.

Así que esta es la pieza de código problemática. Estoy tratando de Camel Case algunas palabras y diferenciar entre texto separado por guiones y guiones bajos. Ignore el hecho de que el algoritmo aún no es completamente correcto, ese no es el punto. Esta es la etapa en la que noté el problema.

 function toCamelCase(str){ let isDash = false for (let char in str) { if (char === "-") { isDash = true } } if (isDash) { return str.split("-").map(word => word[0].toUpperCase() + word.slice(1, word.length + 1)).join("") } else { return str.split("_").map(word => word[0].toUpperCase() + word.slice(1, word.length + 1)).join("") } } let result = "why-false" console.log(toCamelCase(result))

Entonces isDash determina qué tipo de separador contiene el texto. Obviamente, puedo usar una función de flecha en lugar de este enfoque, y funcionaría perfectamente. Algo como esto:

 let isDash = () => { for (let char in str) { if (char === "-") { return true }

Pero no puedo entender por qué el ejemplo anterior no funciona tan bien. He leído sobre el alcance y debería ser posible reasignar a esa variable si se definió en un nivel superior. Incluso si definí isDash fuera de la función, todavía no funcionó. Su valor sigue siendo siempre el inicial: false. ¿Por qué la instrucción if no cambia su valor a verdadero?

 let x = [1, 4, 5, 7] let txt = 0 let working = "no" for (let i in x) { txt += x[i] if (txt > 4) { working = "yes" } } console.log(working)

Como puede ver, si escribo algo similar para demostrar si es posible usar la variable en una declaración if anidada, funciona bien y el trabajo registrará sí. ¿Que me estoy perdiendo aqui? Realmente agradecería algo de ayuda, esto realmente es un callejón sin salida para mí y no habría pedido ayuda si hubiera podido resolverlo yo mismo. ¡Muchas gracias a cualquiera que pueda explicarme estas cosas!

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

0

El problema aquí es su bucle for:

 for (let char in str) { if (char === "-") { isDash = true } }

El ciclo for-in recorre índices o claves, no valores (puede probar esto haciendo console.log(char); en el ciclo). En su lugar, utilice un bucle for-of.

about 4 years ago · Juan Pablo Isaza Relatório

0

El problema es que está utilizando la instrucción for...in, que recorre los nombres de propiedades enumerables de un objeto.

 for (let char in str) { if (char === "-") { isDash = true } }

Puede usar la declaración for...of para iterar sobre cadenas y usar const si no va a reasignar la variable dentro del bloque.

De esta manera:

 for (const char of str) { if (char === "-") { isDash = true } }
about 4 years ago · Juan Pablo Isaza Relatório

0

Estoy bastante seguro de que la razón de esto es el uso de 'let' en lugar de 'var'. (Para ser honesto, no lo había visto usado antes de esta publicación...).

Consulte este artículo: https://www.google.com/amp/s/www.geeksforgeeks.org/difference- between -var-and-let-in-javascript/amp/

Y si esto soluciona su problema, lea más sobre las diferencias entre los dos.

Personalmente, siempre usaría var .

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