javascript - javascript 函数返回的语法(空格)会影响结果吗?

标签 javascript debugging parsing

<分区>

在编写一个 javascript 函数来评估多变量条件时,我遇到了一个看起来像是 Javascript 中的解析器错误的问题。如果我忘记了什么,或者这是适当的行为,请告诉我。

在我的函数中,我返回了几个变量的 AND 结果,如下所示:

return
// a comment, for kicks
a1 && a2
&&
b1 && b2
&&
// another comment
c1 && c2
&&
d1 && d2
;

但是,即使所有这些变量的显式值为 true,该函数也会返回 undefined 而不是预期的 true

我尝试了几种返回这个表达式的变体,我发现:

  1. 多行表达式 -- 失败
  2. 单行表达式 -- 有效
  3. 用括号包裹表达式 -- 有效
  4. 将多行表达式设置为变量,然后返回变量 -- 有效

查看工作示例:http://jsfiddle.net/drzaus/38DgX/

谁能解释为什么会这样?

最佳答案

您遇到的是 Javascript 中称为“分号插入”的奇怪行为。长话短说,当一行的结尾可以解释为语句的结尾而不会引入语法错误时,Javascript 就会这样做。 return 语句后的换行符符合条件——为防止这种情况发生,您可以将返回值括在括号中,如下所示:

return (
  a1 && a2
  ...
  d1 && d2
);

更多详细信息(以及规范中的引述)位于:Trouble understanding semicolon insertion

关于javascript - javascript 函数返回的语法(空格)会影响结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11972059/

相关文章:

java - 引用初始化为 null 的对象数组中的槽

c# - 调试时有效,运行时失败?

Java xml 解析。通过一个函数调用深入浏览 xml 文件

javascript - 如何调整此 javascript 文件以读取本地主机上的数据。解析RDF任务

javascript - 在 Django 中使用 JavaScript 的最佳实践

javascript - 如何使用 JQuery 使用循环插入 JSON 数据中的图像?

javascript - 在 map 制作器上创建事件

javascript - 如何与 RequireJS 共享全局变量/对象

javascript - 在 Visual Studio 11 中使用 Chrome 启用脚本调试

performance - PHP 读取大文本文件