为什么javascript在if语句中接受逗号?

Mat*_*att 62 javascript logic parsing

我偶然发现了一些javascript语法似乎应该产生某种类型的解析错误但不会:

if (true, true) {console.log('splendid')} else {console.log('horrid')} // splendid
if (true, false) {console.log('splendid')} else {console.log('horrid')} // horrid
Run Code Online (Sandbox Code Playgroud)

虽然所有表达式都被执行,但似乎只有最后一个表达式会影响逻辑:

if  (console.log('super'), true) {console.log('splendid')} // super splendid
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么这是有效的JavaScript语法?它有什么实际用途吗?

Ign*_*ams 58

逗号运算符将多个表达式链接在一起,操作的结果是最后一个操作数的值.唯一真正的用途是当您需要发生多种副作用时,例如赋值或函数调用.

  • 一些程序员希望通过编写尽可能少的代码行来编写函数.虽然这可能是一个有趣的挑战,但我认为它们经常陷入不必要的复杂性,使得他们的代码难以理解/维护. (11认同)
  • `if(a = getAValue(), b = getBValue(a), c = b * π, c >= 42) { /* 哇 */ }` (3认同)
  • 您能否更具体地说明“赋值或函数调用”?你的意思是?一般来说,一切都可以在没有逗号运算符的情况下编写。 (2认同)

Ada*_*res 34

逗号运算符计算其每个操作数(从左到右)并返回最后一个操作数的值.

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/Comma_Operator

https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Expressions_and_Operators#comma_o​​perator

  • 感谢您真正回答了来源的问题..可惜我必须滚动浏览一堆其他更高评价的答案才能达到目的 (4认同)

Mat*_*ggs 15

javascript中的逗号实际上非常神秘.我见过的最酷的用途就是这个

while(doSomething(), checkIfSomethingHappened());
Run Code Online (Sandbox Code Playgroud)

最常见的是var在现代js中的使用方式

var foo = 1,
    bar = 2;
Run Code Online (Sandbox Code Playgroud)

  • 这就是`做某事(); while(hasSomethingHappened())`循环是为...而制作的 (6认同)

Sur*_*oot 7

这也与大多数其他编程语言中的相同,在这些语言中,循环中可能有多个迭代器.

int x,y;
for(x = 0, y = 0; x < 10 || y < 100; x++, y++) {
....
}
Run Code Online (Sandbox Code Playgroud)

  • 我知道为什么可以在循环语句中使用它。但是,OP问题与if语句有关。 (2认同)