if statement in javascript always true

谁说胖子不能爱 提交于 2019-12-18 08:09:11

问题


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???


回答1:


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/




回答2:


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



回答3:


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



回答4:


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

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

The or statement was not comparing the variable.




回答5:


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.



来源:https://stackoverflow.com/questions/9303160/if-statement-in-javascript-always-true

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