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

What is the reason behind var a = (expression1, expression2) in javascript?

本文关键字:背后 是什么 expression2 var expression1 javascript      更新时间:2023-09-26

通过一些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){ ... }

我的推理正确吗?

当我尝试检查像(expression1, expression2)这样的结构时,我看到它总是返回第二个表达式

的值

是的。即使没有尝试,这也是逗号操作符的作用。

我的推理正确吗?

是的。您的代码做完全相同的事情,但更可读。

你是对的,那本质上是if(b)。第一个版本的可读性很糟糕,而且不节省空间,所以这样缩小是没有意义的。

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