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.