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

问题描述 投票:0回答:6

我偶然发现了一些 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 parsing logic
6个回答
89
投票

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



21
投票

JavaScript 中的逗号实际上非常晦涩难懂。我见过的最酷的用途是这个

while(doSomething(), checkIfSomethingHappened());

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

var foo = 1,
    bar = 2;

7
投票

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

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

2
投票

我允许在相同的上下文中进行运算和比较。

示例:

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

0
投票

似乎如果执行多个语句,则仅使用“最后一个”评估结果作为条件。

if (true, true,  false) alert(true); else alert(false);  (false)
if (false,false, A = 1) alert(true); else alert(false);  (true)

也许喜欢:

if (eval('false;false;A=1')) alert(true); else alert(false);  (true)
if (eval('true ; true;A=0')) alert(true); else alert(false);  (false)

用途:我需要一个不区分大小写的数组/对象搜索。 (使用获取/设置)

A = {Apple:12.3,Pear:34.5,Peach:3.22};
if (A.find = "pear",  A.found) alert(A.key + ' = ' + A.value);  (Pear = 34.5)
© www.soinside.com 2019 - 2024. All rights reserved.