javascript中var a=(expression1,expression2)背后的原因是什么?

javascript中var a=(expression1,expression2)背后的原因是什么?,javascript,Javascript,通过查看一些JS代码,我发现如下内容: var a, b; if ( (a = someFunction1(), b = someFunction2() ) ){ ... } var a = someFunction1(), b = someFunction2(); if (b){ ... } 我以前从未发现过这样的事情,我也不明白为什么要这样做。因此,我很好奇:做这件事的人是不是疯了,还是我无法理解他的想法 当我尝试检查像(expression1,expressio

通过查看一些JS代码,我发现如下内容:

var a, b;
if (  
  (a = someFunction1(), b = someFunction2() )
){
   ...
}
var a = someFunction1(),
    b = someFunction2();

if (b){ ... }
我以前从未发现过这样的事情,我也不明白为什么要这样做。因此,我很好奇:做这件事的人是不是疯了,还是我无法理解他的想法

当我尝试检查像
(expression1,expression2)
这样的构造的作用时,我发现它总是返回第二个表达式的值:

(5, 6)   // 6
('strange', 'things')    // 'things'
(4, undefined)     // undefined
因此,如果我是编写此代码的人,我会这样做:

var a, b;
if (  
  (a = someFunction1(), b = someFunction2() )
){
   ...
}
var a = someFunction1(),
    b = someFunction2();

if (b){ ... }
我的推理正确吗

当我尝试检查像
(expression1,expression2)
这样的构造的作用时,我发现它总是返回第二个表达式的值

对。即使不尝试,这也是他们的工作

我的推理正确吗


对。你的代码做了完全相同的事情,但可读性更强。

你是正确的,如果(b),那本质上就是
。第一个版本的可读性很差,而且不节省空间,因此将其缩小为这样没有任何意义


在条件语句内部赋值是一种错误的行为。

是缩小代码?@ Bergi看起来不太像,因为在这个代码中到处都有过多的空白。考虑如果函数1会产生副作用,特别是如果某个函数2受到副作用的影响时会发生什么。就个人而言,我不会这样写代码,但有些人显然会这样做。@Joetje50:这可能只是自动缩进(在这里发布,或者通过显示代码的devtools,或者…)@Bergi:如果
条件相同,则这两个函数处于相同的
,这表明它们在某种程度上在概念上是联系在一起的。