for - recorrer array de objetos javascript
si la declaraciĆ³n en javascript siempre es verdadera (5)
Entonces, tengo el código, no está hecho, pero todo lo que quiero es mostrar un cuadro de alerta si escribo la palabra ''ayuda'', y decir algo más si se ingresa algo más.
function prompter() {
var reply = prompt("This script is made to help you learn about new bands, to view more info, type help, otherwise, just click OK")
if (reply === ''help'' || ''Help'')
{
alert("This script helps you find new bands. It was originally written in Python 3.0.1, using Komodo IDE, but was then manually translated into Javascript. Please answer the questions honestly. If you have no opinion on a question, merely press OK without typing anything.")
}
else
{
alert("Press OK to continue")
}
};
pero, lo que sucede, no importa qué, aparece el primer cuadro de alerta, ¡incluso si presiona cancelar! ¿Cómo debería arreglar esto?
El problema está aquí:
if (reply === ''help'' || ''Help'') // <-- ''Help'' evaluates to TRUE
// so condition is always TRUE
El operador de igualdad no "distribuye", prueba
if (reply === ''help'' || reply === ''Help'')
La razón por la que siempre aparece es esa reply === ''help'' || ''Help''
reply === ''help'' || ''Help''
evalúa como (reply === ''Help'') || (''Help'')
(reply === ''Help'') || (''Help'')
. La literal de la cadena de Help
siempre es cierta en Javascript, por lo tanto, siempre se evalúa con la verdad.
Para solucionar esto, necesita comparar la reply
a ambos valores
if (reply === ''help'' || reply === ''Help'') {
...
}
O si desea una variante de caso de ayuda, use una expresión regular
if (reply.match(/^help$/i)) {
...
}
Simplemente cambie esto: if (reply === ''help'' || ''Help'')
Para esto: if (reply === ''help'' || reply === ''Help'')
La declaración or
no estaba comparando la variable.
if (reply === ''help'' || ''Help'')
debiera ser:
if (reply === ''help'' || reply === ''Help'')
dado que ''Help''
es "verídico", por lo que siempre se ingresará la primera parte del if
.
Por supuesto, aún mejor sería hacer una comparación insensible a mayúsculas y minúsculas:
if (reply.toLowerCase() === ''help'')
Ejemplo: http://jsfiddle.net/qvEPe/
El problema es esta línea:
if (reply === ''help'' || ''Help'')
Porque en JavaScript, los objetos y las cadenas no vacías se evalúan como verdaderos cuando se usan como booleanos. Hay un par de excepciones a esto al usar ==
if("0") // true
if("0" == true) // false
En general, no es una buena idea usar ==
o variables sin formato en las declaraciones if.
Como otros han señalado, use
if (reply === ''help'' || reply === ''Help'')
O mejor:
if (typeof reply === ''string'' && reply.toLowerCase() === ''help'')
en lugar.