recorrer objetos objeto for eliminar elemento ejemplos crear ciclo buscar arreglos array agregar javascript if-statement prompt

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.