用+代替||不好吗?

时间:2014-10-16 17:24:22

标签: javascript

注意到JS中自动类型转换的一个特殊副作用:

if (false || false) {

}

与:

相同
if (false + false) {

}

(false || true)(false + true)都会返回相同的结果(true)。

为什么+在这种情况下看不到更多用途?是否有一个可靠的原因(除了可能令人困惑的代码)我们不应该使用+代替||

我想可能会因为额外的演员而受到性能影响,但是嘿 - 我们正在拯救一个角色!可以用一个微优化代替另一个!

4 个答案:

答案 0 :(得分:13)

  

为什么+ +在这种情况下看不到更多用途?

以下是我想到的原因:

  1. 人们不认为使用它,因为他们在思考逻辑,而不是数学。

  2. +将始终评估表达式的两面;如果左侧操作数是真实的,||将不会评估右手操作数)。对if (boolean || boolean)无关紧要; if (func() || func())可以解决很多问题。

  3. ||wonderfully powerful behavior表达式的结果是第一个真实操作数的值,不是 truefalse ,这是非常有用的。 +会产生数字或字符串,但效果不大。

  4. ||将测试其真实/虚假的论点; +会将它们转换为数字或字符串,具体取决于它在任何一方看到的内容。因此,有很多情况||+会给您不同的结果。

  5. 使用+需要您充分了解+将对各种类型执行的操作,使代码不那么清晰且难以维护。

  6. 这只是一个错误的操作员(好吧,所以这个人非常主观:-))。 ||用于逻辑比较,为什么不使用它?

答案 1 :(得分:2)

false || false返回false

false + false返回0(隐含地投放到false

所以是的,它确实有点工作,但是......

||是执行此操作的标准方法,如其他编程语言中所示。 +肯定会让人感到困惑,最终是不正确的:

false || true === truetrue

false + true === truefalse

答案 2 :(得分:1)

因为||运算符,并且其意义优于+,而0 + 0只是添加false来生成+

使用0时,对1false的{​​{1}}和true也会进行投射,有人可能不知道为什么会有两个布尔值已添加,但||显而易见。

最后

  

我想可能会因额外的演员而受到性能影响,但是   嘿 - 我们正在拯救一个角色!是的,一个微优化到位   另一个!

额外广告>保存角色

答案 3 :(得分:0)

请考虑以下代码:

var a=-1;
var b=false;
var c=1;
if(a)alert(true);
if(b)alert(true);
if(c)alert(true);  
//two of the above coerce to `true`
if(a+b+c)
{
  alert("phew");
}
else
{
  //yet we hit this branch
  alert("wtf");
}

还是个好主意?