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.
<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.
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)) {
...
}
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')
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/
Just change this:
if (reply === 'help' || 'Help')
To this:
if (reply === 'help' || reply === 'Help')
The or statement was not comparing the variable.