我偶然发现了一些 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());
最常见的是现代 js 中使用 var 的方式
var foo = 1,
bar = 2;
这也与大多数其他编程语言相同,在这些编程语言中,循环中可能有多个迭代器。
int x,y;
for(x = 0, y = 0; x < 10 || y < 100; x++, y++) {
....
}
我允许在相同的上下文中进行运算和比较。
示例:
if(a = 2, a > 1) console.log('a is', a)
似乎如果执行多个语句,则仅使用“最后一个”评估结果作为条件。
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)