注意到JS中自动类型转换的一个特殊副作用:
if (false || false) {
}
与:
相同if (false + false) {
}
(false || true)
和(false + true)
都会返回相同的结果(true)。
为什么+
在这种情况下看不到更多用途?是否有一个可靠的原因(除了可能令人困惑的代码)我们不应该使用+
代替||
?
我想可能会因为额外的演员而受到性能影响,但是嘿 - 我们正在拯救一个角色!可以用一个微优化代替另一个!
答案 0 :(得分:13)
为什么+ +在这种情况下看不到更多用途?
以下是我想到的原因:
人们不认为使用它,因为他们在思考逻辑,而不是数学。
+
将始终评估表达式的两面;如果左侧操作数是真实的,||
将不会评估右手操作数()。对if (boolean || boolean)
无关紧要; if (func() || func())
可以解决很多问题。
||
有wonderfully powerful behavior表达式的结果是第一个真实操作数的值,不是 true
或false
,这是非常有用的。 +
会产生数字或字符串,但效果不大。
||
将测试其真实/虚假的论点; +
会将它们转换为数字或字符串,具体取决于它在任何一方看到的内容。因此,有很多情况||
和+
会给您不同的结果。
使用+
需要您充分了解+
将对各种类型执行的操作,使代码不那么清晰且难以维护。
这只是一个错误的操作员(好吧,所以这个人非常主观:-))。 ||
用于逻辑比较,为什么不使用它?
答案 1 :(得分:2)
false || false
返回false
false + false
返回0
(隐含地投放到false
)
所以是的,它确实有点工作,但是......
||
是执行此操作的标准方法,如其他编程语言中所示。 +
肯定会让人感到困惑,最终是不正确的:
false || true === true
是true
false + true === true
是false
答案 2 :(得分:1)
因为||
是或运算符,并且其意义优于+
,而0 + 0
只是添加false
来生成+
。
使用0
时,对1
和false
的{{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");
}
还是个好主意?