我在代码中看到我经常使用以下代码样式;
var1 == true && (var2 = true)
经过一些测试后,我认为归结为:
if (var1 == true) {
var2 = true;
}
这是正确的还是还有更多呢?为什么有人会使用它,因为可读性只会大大降低,因为你乍一看它只是检查两个变量。所以你真的必须开始看单或双等号和括号的位置,你才知道......好奇的就在这里..
答案 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');}
我希望这会有所帮助