Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么javascript在if语句中接受逗号?_Javascript_Parsing_Logic - Fatal编程技术网

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

为什么javascript在if语句中接受逗号?,javascript,parsing,logic,Javascript,Parsing,Logic,我偶然发现了一些javascript语法,看起来它应该会产生某种解析错误,但不会: if (true, true) {console.log('splendid')} else {console.log('horrid')} // splendid if (true, false) {console.log('splendid')} else {console.log('horrid')} // horrid 似乎只有最后一个表达式会影响逻辑,尽管所有表达式都会执行: if (console

我偶然发现了一些javascript语法,看起来它应该会产生某种解析错误,但不会:

if (true, true) {console.log('splendid')} else {console.log('horrid')} // splendid
if (true, false) {console.log('splendid')} else {console.log('horrid')} // horrid
似乎只有最后一个表达式会影响逻辑,尽管所有表达式都会执行:

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

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

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

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++) {
....
}
intx,y;
对于(x=0,y=0;x<10|y<100;x++,y++){
....
}
逗号运算符计算其每个操作数(从左到右) 并返回最后一个操作数的值


I允许在同一上下文中进行操作和比较

例如:

if(a = 2, a > 1) console.log('a is', a)

简单的答案是,“因为C做了”,这就是
do Something();虽然(hassomethinghapped())
循环是为…而设计的,但我理解为什么它可以在循环语句中使用。然而,OP的问题是关于
if
语句的。@Bergi。。。do/while循环很愚蠢,因为在看到条件之前先看到语句。实际上,我非常喜欢Matt示例中使用的逗号运算符。巧妙的。我打赌下一轮使用它时,我一定会大惊小怪。while语句中的一个极好的例子。我喜欢。它可能相当于(;doSomething(),checkifSomethingOccessed();)的
@RobertKoritnik您看到条件之前的语句,因为它们是在条件之前执行的?另外,逗号运算符也没有什么不同……您能更具体地描述一下“赋值或函数调用”吗?什么意思?一般来说,任何东西都可以在没有逗号运算符的情况下编写。一些程序员希望通过编写尽可能少的代码行来编写函数。虽然这可能是一个有趣的挑战,但我认为他们经常陷入不必要的复杂性,使他们的代码难以理解/维护。这对我来说没有多大意义,首先为什么允许这样做,如果我要重写上面在问题中写的If语句,我只需将
console.log('super')放在
在if子句的正上方。我理解为什么它可以用在循环语句中。然而,OP问题是关于
if
语句的。尽管在for语句中,它的工作方式不同,因为第一个表达式只计算一次,而第二个和第三个表达式在每次迭代中都计算一次。在if/while语句中,每次访问语句时都会对所有表达式进行求值。感谢您用消息来源实际回答问题。。遗憾的是,我不得不浏览一大堆其他评分更高的答案才能找到它。MDN文档必须已经更新,因为它现在说“逗号运算符计算每个操作数(从左到右)并返回最后一个操作数的值。”