Javascript:var1 == true&& (var2 = true)

时间:2017-06-22 16:26:37

标签: javascript

我在代码中看到我经常使用以下代码样式;

var1 == true && (var2 = true)

经过一些测试后,我认为归结为:

if (var1 == true) {
  var2 = true;
}

这是正确的还是还有更多呢?为什么有人会使用它,因为可读性只会大大降低,因为你乍一看它只是检查两个变量。所以你真的必须开始看单或双等号和括号的位置,你才知道......好奇的就在这里..

2 个答案:

答案 0 :(得分:2)

是的,这是等效的。据我所知,它被称为short-circuit evaluation,描述了解释器在其中一个部分是假的时候会为整个布尔表达式返回false。

实际上,在您的示例中,它会降低可读性。但我认为它只是您工具箱中的另一个工具,当您觉得它可能有用时,您可以使用它。请考虑以下事项:

return user && user.name;

这是我倾向于使用它的一个例子。在这种情况下,我认为它实际上比

更具可读性
if (user) {
  return user.name;
} else {
  return undefined; // or null or something alike
}

<强>更新

当我认为这种结构很有用时,我想再给你一个例子。想想像user => user.name这样的ES6箭头函数。它不需要{}来打开一个正文,因为它只有一行。如果你想将某些东西记录到控制台(用于调试),你最终会得到

user => {
  console.log(user); // or something alike
  return user.name;
}

您也可以使用较短的变体

user => console.log(user) || user.name

因为console.log在登录控制台后返回undefined,因此会返回user.name

答案 1 :(得分:0)

是的,正如你已经提到的更多。

第一部分var1 == true会检查结果是true还是false

如果条件为false,则代码不会被检查或评估,因此var2不会设置为true

但如果条件var1 == true的第一部分显然是true,则检查条件语句的第二部分&&之后的部分。

现在条件的第二部分是它设置(var2 = true)的操作,这是一种真正的操作。

我们可以稍微编辑您的代码,以帮助您更清楚地理解操作:

   if( var1 === true && (var2 = true)){console.log('good');}

我希望这会有所帮助