javascript中的if语句始终为true

javascript中的if语句始终为true,javascript,if-statement,prompt,Javascript,If Statement,Prompt,所以,我有代码,它没有完成,但我希望它做的是显示一个警报框,如果我写的字“帮助”,并说其他什么,如果有任何其他输入 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') {

所以,我有代码,它没有完成,但我希望它做的是显示一个警报框,如果我写的字“帮助”,并说其他什么,如果有任何其他输入

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")
  }
};
但是,不管发生什么,第一个警报框都会弹出,即使您按了取消! 我该如何解决这个问题

if (reply === 'help' || 'Help')
应该是:

if (reply === 'help' || reply === 'Help')
由于
'Help'
是“truthy”,因此将始终输入
if
的第一部分

当然,最好是进行不区分大小写的比较:

if (reply.toLowerCase() === 'help')

示例:

它总是弹出的原因是
reply==“help”| |“help”
的计算结果为
(reply==“help”)| |(“help”)
。字符串literal
Help
在Javascript中总是truthy,因此它的计算结果总是truthy

要解决此问题,您需要将
reply
与这两个值进行比较

if (reply === 'help' || reply === 'Help') {
  ...
}
或者,如果您需要帮助的任何case变量,请使用正则表达式

if (reply.match(/^help$/i)) {
  ...
}
问题在于:

if (reply === 'help' || 'Help') // <-- 'Help' evaluates to TRUE
                                //      so condition is always TRUE
只要改变这个:
if(reply==“help”| |“help”)

为此:
if(回复===“帮助”|回复===“帮助”)


语句没有比较变量。

问题在于这行:

 if (reply === 'help' || 'Help')
因为在JavaScript中,对象和非空字符串在用作布尔值时计算为true。使用
==

 if("0") // true
 if("0" == true) // false
通常,在if语句中使用
=
或原始变量不是一个好主意

正如其他人所指出的,使用

if (reply === 'help' || reply === 'Help')
或者更好:

if (typeof reply === 'string' && reply.toLowerCase() === 'help')

相反。

“帮助”在本例中并不真实,因为没有
==
-请参阅我的答案。然而,“Help”是真的,因为字符串是真的,除非周围有
=
操作符。@TimothyJones:我不确定这是否正确。作为非布尔值,
'Help'
不能简单地为
true
。但是,在计算时,它被强制为
true
。换句话说,无论是否存在
=
,类型强制都会发生。@AndrewWhitaker是的,字符串强制为true,除非它们为空。但是,Javascript中的“truthyness”仅在存在
=
时发生(truthyness是由抽象相等比较算法引起的,您可以在ECMAScript规范第5版11.9.3中找到)。因此字符串
“0”
也被强制为true,除非周围有
=
。通常将字符串描述为真实与否是一种误导,因为真实只发生在比较中。@TimothyJones-我不同意。“真实感”是一个比你想象的更一般的术语。快速示例:
var x='A'| |'B'
-
x
将是
'A'
,而不是
true
,因此它没有被强制为
true
,即使在视线中没有
=
操作符。这肯定是“真实”的一个例子吗?(除非您试图说它被强制为
true
,同时保留其原始字符串值,这是很愚蠢的。)此外,
0==“0”
不会强制为
true
,即使存在
==
。@nnnnnn Javascript不同意-
如果(0==“0”)控制台。log(“true”)
prints true:)非空字符串是真实的,不是真的-否则
“string”===true
将计算为
true
@nnnnnn您是对的。我原以为在Javascript中,truthy的大多数用法也指“0”,但谷歌的快速搜索表明情况并非如此。我会更新的。
if (typeof reply === 'string' && reply.toLowerCase() === 'help')