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

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

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 Report

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 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!