Hola, estoy escribiendo prácticamente un juego de azar con JavaScript y, por alguna razón, incluso cuando se da la respuesta correcta, muestra que perdiste. He intentado cambiar las condiciones if pero no soy lo suficientemente versado como para resolverlo. Esta es la primera vez que hago una pregunta aquí. Si necesita más información, le proporcionaré lo que sé y, si ya se ha respondido, no pude encontrarlo o no lo reconocí como la respuesta, como dije. Todavía soy bastante nuevo. en la codificación en general.
este es el html
<h3>CAN YOU GUESS MY NUMBER!!</h3> <h4>You get two guess and my number is random every time you try. Goodluck!</h4> <input type="text" onkeyup="guessOneCheck(this)" placeholder="enter your guess 1-10" id="guessOne" maxlength="2"> <input type="text" onkeyup="guessTwoCheck(this)" placeholder="enter your guess 1-10" id="guessTwo" maxlength="2"> <button id="submit__Guesses" onclick="bothWrong()">SUBMIT GUESSES</button> <div id="guessAnswer"></div> <script src="main.js"></script>este es el javascript
let guessOne = '' let guessTwo = '' const guessOneCheck = (g1) => { guessOne = g1.value console.log(g1.value) } const guessTwoCheck = (g2) => { guessTwo = g2.value console.log(g2.value) } const bothWrong = () =>{ let randomNum = Math.floor((Math.random() *10) + 1); console.log(randomNum) if(guessOne !== randomNum && guessTwo !== randomNum){ document.getElementById('guessAnswer').innerHTML = 'HaHa you lose better luck next time!! My number was' + ' ' + randomNum; } else if(guessOne == randomNum || guessTwo == randomNum){ document.getElementById('guessAnswer').innerHTML = 'What! No you cheated, or omg are you a psychic!!! My number was' + ' ' + randomNum; } }El error aquí es esta línea:
if (guessOne !== randomNum && guessTwo !== randomNum) { !== es una verificación estricta que compara tanto el valor como el tipo. Si bien el valor puede ser correcto, el tipo no lo será porque está tomando adivinar uno y adivinar dos de los campos de entrada, lo que significa que son cadenas, mientras que randomNum es del tipo Número. Tienes que convertirlos en números, lo que puedes hacer así:
const guessOneCheck = (g1) => { guessOne = +g1.value console.log(g1.value) } const guessTwoCheck = (g2) => { guessTwo = +g2.value console.log(g2.value) }Debería funcionar bien después de eso
Tu adivinaUno y adivinaDos son cadenas. Si console.log, verá, por ejemplo, "1" . Necesitas convertir cadena a número usando +guessOne y +guessTwo :
if(+guessOne !== randomNum && +guessTwo !== randomNum){ document.getElementById('guessAnswer').innerHTML = 'HaHa you lose better luck next time!! My number was' + ' ' + randomNum; } else if(+guessOne == randomNum || +guessTwo == randomNum){ document.getElementById('guessAnswer').innerHTML = 'What! No you cheated, or omg are you a psychic!!! My number was' + ' ' + randomNum; }Hay dos soluciones a este error.
No compare usando '===' o '!=='. También conduce a la verificación de tipo, lo que significa que si el número ingresado es '3' (que es un tipo de cadena) y su comparación será con un número 3 que dará como resultado falso a medida que se realiza la verificación de tipo. En su lugar, use != or ==
Convierta la cadena ingresada en un número antes de la comparación, esto se puede hacer por Number(enteredNumber) o let number = +enteredNumber