Estaba creando un juego de piedra, papel o tijera para poner a prueba mi conocimiento de las funciones. Había escrito este código para ver si el usuario había dado una entrada válida de piedra, papel o tijera:
const getUserChoice = userInput => { userInput = userInput.toLowerCase(); if(userInput === 'rock'){ return userInput; } else if(userInput === 'paper') { return userInput; } else if(userInput === 'scissor'){ return userInput; } else { console.log('Invalid Option'); } }; Cuando probé la última declaración else haciendo un console.log así:
console.log(getUserChoice('water'));Imprimió roca en lugar de imprimir "Opción no válida".
Cuando revisé la solución vi esto:
if (userInput === 'rock' || userInput === 'paper' || ... ) { return userInput; } else { console.log('Error!'); } Entonces, ¿cuál es la diferencia entre usar un else-if para realizar esta tarea y usar el || ¿operador?
Editar: cometí un error al usar = en lugar de ===, por lo que se solucionó, pero aún me gustaría saber si hay alguna diferencia y cuál es más eficiente para casos de uso particulares.
El problema es con el operador = vs === . === se usa para verificar la igualdad y = es para la asignación.
Cuando escribe if(userInput = 'rock') significa que a userInput se le asigna el valor de rock . Lo que realmente quieres es if(userInput === 'rock')
En cuanto a la || operador (también llamado OR), lo que sucede es una operación de cortocircuito. Si escribes A || B || C , ocurre lo siguiente:
true , B y C no se evalúan.false , entonces se evaluated B.B es verdadero, entonces C no se evalúa.No hay diferencia funcional entre usar || y usando if / else .
En JavaScript, el || El operador funciona así:
por a || b , comprueba si a es veraz . En caso afirmativo, resuelva a a . De lo contrario, resuelva a b .
Ahora, como habrás notado, la redacción de eso es bastante idéntica a cómo describirías el comportamiento de un bloque condicional if / else . Funcionalmente, no hay diferencia en el comportamiento.
En una nota relacionada, el operador && funciona de manera similar, excepto que solo si a es verdadero, a && b se resolverá en b . Si alguna vez observa el código minimizado, a veces verá que && se usa para reemplazar una declaración if , porque a && b es funcionalmente idéntico a if (a) { b; } pero ocupa menos caracteres.
No recomendaría usar ese enfoque en código no minificado, ya que definitivamente es más difícil de seguir, pero ocupa menos caracteres sin funcionar de manera diferente, razón por la cual los minificadores lo usan. Algo similar a cómo a menudo usan !0 en lugar de true .
La diferencia es que la declaración if else solo se comprueba/ejecuta si los if/if else anteriores son falsos. La declaración o ( || ) es verdadera si cualquiera de las condiciones individuales es verdadera