Reputation: 10686
So, I have the code, its not done, but all i want it to do is display one alert box if I write the word 'help', and say something else if anything else is entered.
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")
}
};
but, what happens, is no matter what, the first alert box pops up, even if you press cancel! How should I fix this???
Upvotes: 6
Views: 6881
Reputation: 22125
The problem is this line:
if (reply === 'help' || 'Help')
Because in JavaScript, objects and non-empty strings evaluate to true when used as a boolean. There are a couple of exceptions to this when using ==
if("0") // true
if("0" == true) // false
In general, it's not a good idea to use ==
or raw variables in if statements.
As others have pointed out, use
if (reply === 'help' || reply === 'Help')
Or better:
if (typeof reply === 'string' && reply.toLowerCase() === 'help')
instead.
Upvotes: 0
Reputation: 6114
Just change this:
if (reply === 'help' || 'Help')
To this:
if (reply === 'help' || reply === 'Help')
The or
statement was not comparing the variable.
Upvotes: 1
Reputation: 26228
The problem is here:
if (reply === 'help' || 'Help') // <-- 'Help' evaluates to TRUE
// so condition is always TRUE
The equality operator doesn't "distribute", try
if (reply === 'help' || reply === 'Help')
Upvotes: 2
Reputation: 754685
The reason why it always pops up is that reply === 'help' || 'Help'
evaluates as (reply === 'Help') || ('Help')
. The string literal Help
is always truthy in Javascript hence it always evaluates to truthy.
To fix this you need to compare reply
to both values
if (reply === 'help' || reply === 'Help') {
...
}
Or if you want any case variant of help use a regex
if (reply.match(/^help$/i)) {
...
}
Upvotes: 1
Reputation: 126042
if (reply === 'help' || 'Help')
should be:
if (reply === 'help' || reply === 'Help')
since 'Help'
is "truthy" and so the first part of the if
will always be entered.
Of course, even better would be to do a case-insensitive comparison:
if (reply.toLowerCase() === 'help')
Example: http://jsfiddle.net/qvEPe/
Upvotes: 12