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

我偶然发现了一些JavaScript语法,它似乎应该会产生某种types的parsing错误,但是不会:

if (true, true) {console.log('splendid')} else {console.log('horrid')} // splendid if (true, false) {console.log('splendid')} else {console.log('horrid')} // horrid 

似乎只有最后一个expression式影响逻辑,尽pipe所有expression式都被执行:

 if (console.log('super'), true) {console.log('splendid')} // super splendid 

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

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

JavaScript中的逗号实际上非常神秘。 我见过的最酷的使用是这样的

 while(doSomething(), checkIfSomethingHappened()); 

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

 var foo = 1, bar = 2; 

这也和大多数其他编程语言一样,在循环中可能有多个迭代器。

 int x,y; for(x = 0, y = 0; x < 10 || y < 100; x++, y++) { .... }