No entiendo por qué mi segunda instrucción else if nunca se ejecuta. ¿Alguien puede explicar me lo?
Name = window.prompt("Tell your First Name"); if (Name.endsWith('X') == true || Name.endsWith('x') == true) { meh = Name.slice(0, -1) console.log(meh) } else if (Name.startsWith('X') == true || Name.startsWith('x') == true) { hello = Name.slice(1) console.log(hello) } else if (Name.startsWith('X') == true || Name.startsWith('x') == true && Name.endsWith('X') == true || Name.endsWith('x') == true) { var result = Name.slice(1) && Name.slice(0, -1); console.log(result) } else { console.log(Name) }Su código debe comenzar con lo más específico y llegar a lo mínimo. El código no verificará todos los casos y descubrirá cuál es la mejor coincidencia, comienza desde arriba y lo primero que coincide es que sale.
const firstName = window.prompt("Tell your First Name"); const endsWith = firstName.toUpperCase().endsWith('X'); const startsWith = firstName.toUpperCase().startsWith('X'); if (startsWith && endsWith) { console.log('starts and ends'); } else if (startsWith) {console.log('starts'); } else if (endsWith) {console.log('ends'); } else {console.log('nope'); }Hay bastantes problemas con tu lógica. Por ejemplo:
Tiene una condición compuesta para verificar un carácter en una cadena, pero debe cambiar el caso de la cadena y luego determinar si el carácter que está buscando "comienza con" o "finaliza con", que parece ser el único que le preocupa.
en segundo lugar, las funciones "startsWith" y "endWith" devuelven naturalmente un valor booleano, por lo que equiparar el retorno con verdadero o falso sería redundante e innecesario.
Si de lo contrario la ejecución de uno u otro
De lo contrario, si ejecuta uno u otro, solo habilita la capacidad de tener en cuenta otros escenarios.
const Name = window.prompt("Tell your First Name"); if (Name.toUpperCase().endsWith('X')) { hello = Name.slice(1) console.log(hello) } else if (Name.toUpperCase().startsWith('X')) { var result = Name.slice(1) && Name.slice(0, -1); console.log(result) } else { console.log(Name) } const Name = window.prompt("Tell your First Name"); if (Name.toUpperCase().endsWith('X')) { hello = Name.slice(1) console.log(hello) } if (Name.toUpperCase().startsWith('X')) { var result = Name.slice(1) && Name.slice(0, -1); console.log(result) } else { console.log(Name) }startsWithX && endsWithX para que sea la primera condición; de lo contrario, uno de los anteriores ocupará su lugar.X y x Name = window.prompt("Tell your First Name").toLowerCase(); console.log('Answer: ', Name); if (Name.startsWith('x') == true && Name.endsWith('x') == true) { var result = Name.slice(1) && Name.slice(0, -1); console.log('Starts and ends with X', result) } else if (Name.endsWith('x') == true) { meh = Name.slice(0, -1) console.log('Ends with X', meh) } else if (Name.startsWith('x') == true) { hello = Name.slice(1) console.log('Starts with X', hello) } else { console.log('Default', Name) }