Si l'énoncé dans javascript est toujours vrai

Donc, j'ai le code, ce n'est pas fait, mais tout ce que je veux que cela fasse est d'afficher une boîte d'alerte si j'écris le mot «aide» et dis quelque chose d'autre si quelque chose d'autre est entré.

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") } }; 

Mais, qu'est-ce qui se passe, n'importe quoi, la première boîte d'alerte apparaît, même si vous appuyez sur Annuler! Comment dois-je résoudre ce problème ???

 if (reply === 'help' || 'Help') 

devrait être:

 if (reply === 'help' || reply === 'Help') 

Puisque 'Help' est "truthy" et donc la première partie du if sera toujours saisie.

Bien sûr, même mieux serait de faire une comparaison insensible aux cas:

 if (reply.toLowerCase() === 'help') 

Exemple: http://jsfiddle.net/qvEPe/

Le problème est ici:

 if (reply === 'help' || 'Help') // <-- 'Help' evaluates to TRUE // so condition is always TRUE 

L'opérateur d'égalité ne "distribue pas", essayez

 if (reply === 'help' || reply === 'Help') 

La raison pour laquelle il apparaît toujours est cette reply === 'help' || 'Help' reply === 'help' || 'Help' évalue comme (reply === 'Help') || ('Help') (reply === 'Help') || ('Help') . L' Help littérale de chaîne est toujours véridique dans Javascript, donc elle est toujours valable pour la vérité.

Pour résoudre ce problème, vous devez comparer la reply aux deux valeurs

 if (reply === 'help' || reply === 'Help') { ... } 

Ou si vous voulez une variante de cas d'aide, utilisez une regex

 if (reply.match(/^help$/i)) { ... } 

Modifiez simplement ceci: if (reply === 'help' || 'Help')

À ceci: if (reply === 'help' || reply === 'Help')

L'instruction or ne compare pas la variable.

Le problème est cette ligne:

  if (reply === 'help' || 'Help') 

Parce que dans JavaScript, les objets et les chaînes non vides évaluent à vrai lorsqu'ils sont utilisés comme boolean. Il y a quelques exceptions à cela lorsque vous utilisez ==

  if("0") // true if("0" == true) // false 

En général, ce n'est pas une bonne idée d'utiliser == ou les variables brutes dans les instructions if.

Comme d'autres l'ont souligné, utilisez

 if (reply === 'help' || reply === 'Help') 

Ou mieux:

 if (typeof reply === 'string' && reply.toLowerCase() === 'help') 

au lieu.