Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

225
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!