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

时间:2014-05-12 23:19:29

标签: javascript

通过一些JS代码,我找到了类似的东西:

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

我之前从未发现过这样的事情,我不明白做这样的事情的原因。因此,我很好奇:那个人是出于这个想法,还是我无法理解他的想法。

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

(5, 6)   // 6
('strange', 'things')    // 'things'
(4, undefined)     // undefined

因此,如果我是编写此代码的人,我会做这样的事情:

var a = someFunction1(),
    b = someFunction2();

if (b){ ... }

我的推理是否正确?

2 个答案:

答案 0 :(得分:4)

  

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

是。即使没有尝试,这也是comma operator所做的。

  

我的推理是否正确?

是。您的代码完全相同,但更具可读性。

答案 1 :(得分:2)

你是对的,基本上是if(b)。第一个版本的可读性很糟糕,并没有节省空间,所以将它缩小就没有任何意义。

在条件语句中分配变量是不好的做法。