我最近遇到了以下语法错误:
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并很快发现没有工作时,我会记得早期尝试这种速记。
我已经纠正了这段代码,但令我烦恼的是,我无法理解它为什么会起作用。
任何人都可以阐明这个谜团吗?
答案 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"