为什么我的错误if语句有效?

时间:2015-03-17 09:41:59

标签: javascript if-statement syntax-error logical-operators

我最近遇到了以下语法错误:

if (button=="init" || "show_selected" || "show_all") {

当然应该是:

if (button=="init" || button=="show_selected" || button=="show_all") {

但是,最初的声明似乎在Chrome,FF和IE9中完美运行了!?!?我只是在添加新选项时偶然发现了我的错误。

澄清," init"," show_selected"和" show_all"是调用函数时使用的字符串参数; e.g。

onclick=myFunction("init");

我确信在学习JS并很快发现没有工作时,我会记得早期尝试这种速记。

我已经纠正了这段代码,但令我烦恼的是,我无法理解它为什么会起作用。

任何人都可以阐明这个谜团吗?

2 个答案:

答案 0 :(得分:1)

当然它会起作用,它会一直有效因为你的情况总是true

if (button=="init" || "show_selected" || "show_all")

总是会给出true,因为"show_selected"是一个字符串,如果你将它作为if语句传递,它将永远为真,你的代码将按如下方式计算:

if (button=="init" || true || true) // Will always be true

因为撰写if ("show_all")相当于if ("show_all" !== null) true

例如,试试这个:



if ("show_all"){ //returns true (the statement is true)
   alert(true); 
}




答案 1 :(得分:0)

您的字符串是真值的表达式。

if ("show_selected") { /* ... */ }

...会在块中运行代码。

您在每个OR语句的RHS上使用字符串,因此每个语句的RHS都是正确的。


假设:

myFunction("init");

然后:

button=="init"

是:

true

所以:

button=="init" || "show_selected" 
true || "show_selected" 
true

如果您传递任何其他值

button=="init" || "show_selected" 
false || "show_selected" 
"show_selected"