A lo largo de los años, ha habido múltiples respuestas a esta pregunta, que evolucionaron a partir de un código torpe.
En 2022, ¿existe una forma única o mejorada de obtener la condición if falló en un escenario múltiple?
ejemplo uno, myVarTwo falla
if (( myVarOne == "alpha") && ( myVarTwo == "beta") && ( myVarThree == "cappa"){ // do stuff }else{ console.log("failed at ...) } ejemplo dos, myVarThree falla
if (( myVarOne == "alpha") && (( myVarTwo == "beta") || ( myVarThree == "cappa")){ // do stuff }else{ console.log("failed at ...) }Supongo que la prueba de condiciones se detiene en el primer error.
En primer lugar, su suposición de que la prueba de condición se detiene en el primer error es correcta. El operador lógico && es un operador de cortocircuito . Volverá a la primera instancia de una evaluación falsa. Por el contrario, el || El operador regresa a la primera instancia de una evaluación veraz.
Dicho esto, mi única suposición sería usar operadores ternarios, pero no estoy seguro de si lo consideraría como una sola línea. Especialmente si tiene muchas más condiciones para verificar, el operador ternario se volvería muy, muy largo y no muy legible. Se puede ver que los operadores ternarios simulan múltiples condiciones if...else que se prueban secuencialmente , con una acción para cada verificación.
const myVarOne = "alpha", myVarTwo = "notBeta", myVarThree = "cappa" const printFailure = (string) => { console.log(`Failed at ${string}`) } const printSuccess = () => { console.log('All conditions satisfied!') } // Method 1 myVarOne != "alpha" ? printFailure("myVarOne") : myVarTwo != "beta" ? printFailure("myVarTwo") : myVarThree != "cappa" ? printFailure("myVarThree") : printSuccess() // Method 2 myVarOne == "alpha" ? myVarTwo == "beta" ? myVarThree == "cappa" ? printSuccess() : printFailure("myVarThree") : printFailure("myVarTwo") : printFailure("myVarOne")