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

标签 javascript

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

var1 == true && (var2 = true)

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

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

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

最佳答案

是的,这是等价的。据我所知,它的名字叫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

关于JavaScript: var1 == true && (var2 = true),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44704846/

相关文章:

javascript - 如何从 javascript 调用 flash actionscript 回调方法?

javascript - 如何从使用 addEventListener 添加的事件的元素中删除类?

javascript - 移动事件元素在 Internet Explorer 中丢失 mouseout 事件

javascript - 当我在 C++ 附加组件中创建 ArrayBuffer 时,node-webkit 崩溃

javascript - 添加工具提示到谷歌可视化条形图

javascript - 使用 Typescript 时出现 "Property ... does not exist on type ..."错误

javascript - 如何转换字符串格式数据

javascript - 简单的 onclick 页面加载器

javascript - Angular 5. 如何跟踪 Javascript 文件中的路由更改,或在组件级别执行功能?

javascript - 如何重构Json