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

161
Visualizações
Javascript: falso si la declaración siempre se evalúa como verdadera

Estoy escribiendo un simple juego de piedra, papel o tijera basado en consola como ejercicio. Sin embargo, la siguiente condición siempre se evalúa como verdadera.

 if (playerselection === computerselection) { console.log('Draw!');

He introducido varios comandos de console.log, así como puntos de interrupción para identificar si hay un problema con el alcance o una alteración en los parámetros; este no parece ser el caso. La selección de jugadores podría ser 'Roca', mientras que la selección de computadoras podría ser 'Tijeras' (ambos verificados durante la depuración) y, sin embargo, la condición se trata como verdadera y la consola muestra "¡Dibujar!". El código completo se muestra a continuación:

 array = ['Rock', 'Paper', 'Scissors']; computerPlay(); userPlay(); evaluation(); function computerPlay() { computerselection = array[Math.floor(Math.random() * array.length)]; } function userPlay() { playerselection = prompt('Choose: Rock, Paper or Scissors', 'Choose it! NOW!!'); } function evaluation(playerselection, computerselection) { if (playerselection === computerselection) { console.log('Draw!'); } else if ( (playerselection == "rock" && computerselection == "scissors") || //All possible victories (playerselection == "paper" && computerselection == "rock") || (playerselection == "scissors" && computerselection == "paper")) { console.log("You win!"); } else { console.log("You lose)"); } }

¿Cuál es la causa de que la primera condición if se evalúe como verdadera cada vez, incluso si console.log(playerselection === computerelection) se evalúa como falsa durante la depuración?

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

0

Algunas pistas.

En

 function evaluation(playerselection, computerselection) {

tiene una declaración de dos variables (locales) y las usa para la comparación.

Más tarde, llamas a la función

 evaluation()

sin algunos parámetros y Javascript toma un valor predeterminado de undefined , como para todas las demás variables declaradas sin valor.

Aquí el código con algunos cambios:

  • declaración de cualquier variable por adelantado,
  • devolver el valor de la matriz de la entrada,
  • use ambos valores directamente en la evaluation ,
  • salir temprano para evitar estructuras anidadas if ... else ,
  • Evite el uso de paréntesis innecesarios, eche un vistazo a la precedencia del operador , si tiene dudas.

Los datos en la array deben estar en minúsculas como entrada.

 function computerPlay() { return array[Math.floor(Math.random() * array.length)]; } function userPlay() { return (prompt('Choose: rock, paper or scissors') || '').toLowerCase(); } function evaluation(playerselection, computerselection) { if (playerselection === computerselection) { console.log('Draw!'); return; } if ( playerselection === "rock" && computerselection === "scissors" || playerselection === "paper" && computerselection === "rock" || playerselection === "scissors" && computerselection === "paper" ) { console.log("You win!"); return; } console.log("You lose"); } const array = ['rock', 'paper', 'scissors']; evaluation(userPlay(), computerPlay());

about 4 years ago · Juan Pablo Isaza Relatório

0

Aquí, ambas variables no están en el ámbito global y, por lo tanto, no son accesibles dentro de la función evaluar(). Esta es la razón por la cual ambos no están undefined dentro de evaluar () y satisfacen la condición if cada vez.

Intente definir ambas variables en el ámbito global como se muestra a continuación y elimine los parámetros de la declaración de función de evaluación ().

 let computerselection = ""; let playerselection = ""; function evaluation() { //code stuff }
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