在编写一个javascript函数来评估多变量条件时,我遇到了似乎是Javascript中的解析器错误。如果我遗忘了某些内容,或者这是否适当,请告诉我。
在我的函数中,我返回了几个变量的AND
结果,如下所示:
return
// a comment, for kicks
a1 && a2
&&
b1 && b2
&&
// another comment
c1 && c2
&&
d1 && d2
;
但是,即使所有这些变量的显式值都为true
,该函数也会返回undefined
而不是预期的true
。
我尝试了几种返回此表达式的变体,我发现:
参见工作示例:http://jsfiddle.net/drzaus/38DgX/
有人可以解释为什么会这样吗?
答案 0 :(得分:7)
您遇到的是Javascript中的奇怪行为,称为“分号插入”。总而言之,当一行的结尾可以被解释为语句的结尾而不引入语法错误时,Javascript将会这样做。在return
语句符合条件后的换行符 - 为了防止这种情况发生,您可以将返回的值包装在括号中,如下所示:
return (
a1 && a2
...
d1 && d2
);
有更多细节(以及规范中的引用):Trouble understanding semicolon insertion
答案 1 :(得分:6)
这是正确的行为。将return;
放入函数将导致它返回undefined
。在您的示例中,return
之后的换行符使解析器认为这是语句的结尾,因此返回undefined
。
答案 2 :(得分:2)
啊哈 - 相关链接: JavaScript Whitespace Syntax Error
似乎解析器在return
之后看到换行符并自动将其处理为分号。在它工作的情况下,有一个parethesis指示解析器它实际上是一个多行子句,或者它在一行(从而否定autoinsert),或者在变量的情况下它是由解析器处理不同。