Estoy trabajando en un proyecto para una de mis clases donde necesito usar la entrada de los usuarios para redirigirlos a un sitio web. Requiere que la elección de los usuarios se valide mediante un ciclo, por lo que opté por utilizar un ciclo while para verificar si la entrada de los usuarios difiere de lo que debería ser y, si es así, se le solicita al usuario que vuelva a ingresar su respuesta. . Aquí está el código:
var websitechoice; websitechoice = parseInt(prompt("Which website would you like to go to? \n 1. google \n 2. gmail \n 3. youtube")) while (websitechoice != 1 || 2 || 3) { alert("you input an incorrect value") websitechoice = parseInt(prompt("Which website would you like to go to? \n 1. google \n 2. gmail \n 3. youtube")) } if (websitechoice = 1) { alert("you chose 1") } else if (websitechoice = 2) { alert("you chose 2") } else { alert("you chose 3") }Hasta ahora, solo hice una simulación rápida para verificar si funcionaría, pero cada vez que intento ejecutarlo, siempre recibo "ingresó un valor incorrecto", incluso cuando ingresa 1, 2 o 3, y así. Nada de lo que he intentado ha diferido en los resultados. si alguien me puede ayudar se lo agradeceria mucho, gracias
Está utilizando una definición en la declaración if, en el sentido de que le está diciendo al código que la elección del sitio web ahora es igual a ese número. Deberías usar un comparador así.
if (websitechoice == 1) { alert("you chose 1") } else if (websitechoice == 2) { alert("you chose 2") } else { alert("you chose 3") }Para su declaración while, debe cambiarla a una declaración, porque solo desea ejecutar el código cuando no es igual a uno y no es igual a dos y no es igual a tres
while (websitechoice != 1 && websitechoice != 2 && websitechoice != 3) { alert("you input an incorrect value") websitechoice = parseInt(prompt("Which website would you like to go to? \n 1. google \n 2. gmail \n 3. youtube")) } También podría simplemente decir, if websitechoice > 3 , entonces realice el proceso de alerta
Hay muchas fallas en su código. En primer lugar, debe usar el operador AND en lugar del operador OR. Además, debe romper la comparación como se demostró a continuación.
En segundo lugar, ha utilizado el operador de asignación ( = ) en la instrucción if else. Debe usar el operador de comparación ( == o === ) para comparar; de lo contrario, devolverá 1 cada vez.
var websitechoice; websitechoice = parseInt(prompt("Which website would you like to go to? \n 1. google \n 2. gmail \n 3. youtube")) while (websitechoice !== 1 && websitechoice !== 2 && websitechoice !== 3) { alert("you input an incorrect value") websitechoice = parseInt(prompt("Which website would you like to go to? \n 1. google \n 2. gmail \n 3. youtube")) } if (websitechoice === 1) { alert("you chose 1") } else if (websitechoice === 2) { alert("you chose 2") } else { alert("you chose 3") }Además, será fácil de depurar si coloca su código en el fragmento. Parece que eres bastante nuevo en la comunidad de desarrolladores. ¡Bienvenido a la comunidad de codificadores!
El != tiene prioridad sobre el || operador 1 entonces:
websitechoice != 1 || 2 || 3siempre evaluará a:
(websitechoice != 1) || 2 || 3que no es lo que quieres...
otro tema es que:
websitechoice = 1es una asignación, no una comparación.
Para arreglar su código sin cambiar su estructura:
var websitechoice; websitechoice = parseInt(prompt("Which website would you like to go to? \n 1. google \n 2. gmail \n 3. youtube")) while (websitechoice !== 1 && websitechoice !== 2 && websitechoice !== 3) { alert("you input an incorrect value") websitechoice = parseInt(prompt("Which website would you like to go to? \n 1. google \n 2. gmail \n 3. youtube")) } if (websitechoice === 1) { alert("you chose 1") } else if (websitechoice === 2) { alert("you chose 2") } else { alert("you chose 3") }Una forma más limpia de verificar si su entrada es una de una lista de valores probablemente sería:
[1,2,3].includes(websitechoice)que es más limpio y puede escalar fácilmente a más valores.
También reemplacé los operadores == con === , no use == en JS a menos que sepa lo que está haciendo. 2