if statement in javascript always true

橙三吉。 提交于 2019-11-29 13:54:32
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/

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')

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)) {
  ...
}

Just change this: if (reply === 'help' || 'Help')

To this: if (reply === 'help' || reply === 'Help')

The or statement was not comparing the variable.

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!