【问题标题】:Javascript: var1 == true && (var2 = true)Javascript: var1 == true && (var2 = true)
【发布时间】:2017-06-22 16:26:37
【问题描述】:

我在我正在处理的代码中经常看到以下代码样式;

var1 == true && (var2 = true)

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

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

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

【问题讨论】:

  • 这是正确的,是的,它不利于可读性。
  • 第一次与true比较是多余的。
  • @Nina,哈哈,你说得对,当然是代码中的其他内容,我应该明白这一点
  • @Nina 试图增加此处不可读语句的可读性,但我认为它适合示例。

标签: javascript


【解决方案1】:

是的,这是等价的。据我所知,它被称为short-circuit evaluation,描述了这样一个事实,即解释器将在其一部分为假时立即为整个布尔表达式返回假。

确实,在您的示例中,它确实降低了可读性。但我认为它只是你工具箱中的另一个工具,当你觉得它有用时可以使用它。考虑以下几点:

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

【讨论】:

  • 我不得不在可读性上不同意,你可能会节省一些行,但它并没有变得更清晰。我怀疑如果你经常使用它,你可能会习惯这个
  • @Bastiaan 是的。我想我既不会说“总是使用它”,也不会说“永远不要使用它”。很高兴知道您可能拥有的每一种可能性。
  • @SWSSchmidt,到达那里还没有完全相信:) 你的解释虽然很合理,但谢谢!
  • 这个巧妙的技巧user => console.log(user) || user.name 对胖箭头函数很有帮助。
【解决方案2】:

是的,正如您所提到的,还有更多内容。

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

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

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

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

我们可以稍微修改一下您的代码,以帮助您更清楚地理解操作:

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

希望对你有帮助

【讨论】:

  • 所以我提供的两个示例中的功能是相同的。
  • 好吧,我不会这么说,虽然结果是一样的,但在第一个例子中,你正在检查var1 === true 和操作(var2 = true) 本身的值是否是真的/假的,所以整行 var1 === true && (var2 = 'watever') 是一个布尔条件是的,两个示例集 var2 但在第一个示例中,您也在检查操作的结果 var2 = true 但没有对结果做任何事情,而在第二个示例中,您是仅在 var1 为真时检查 var1 并设置 var2..
猜你喜欢
  • 2020-07-13
  • 1970-01-01
  • 2011-04-02
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多