javascript中var a=(expression1,expression2)背后的原因是什么?
通过查看一些JS代码,我发现如下内容: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
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:如果
条件相同,则这两个函数处于相同的,这表明它们在某种程度上在概念上是联系在一起的。