Javascript 使用+不好吗;代替| |?
刚刚注意到JS中自动类型转换的一个特殊副作用:Javascript 使用+不好吗;代替| |?,javascript,Javascript,刚刚注意到JS中自动类型转换的一个特殊副作用: if (false || false) { } 同: if (false + false) { } 并且(false | | true)和(false+true)都将返回相同的结果(true) 为什么+在这种情况下看不到更多的用途?我们不应该用+来代替|,除了可能混淆的代码之外,还有什么坚实的理由吗 我想可能会有一个额外的演员表演命中,但嘿,我们正在拯救一个角色!是的,一个微优化取代了另一个 因为|是一个或运算符,它的意义比+更好,后者只是
if (false || false) {
}
同:
if (false + false) {
}
并且(false | | true)
和(false+true)
都将返回相同的结果(true)
为什么+
在这种情况下看不到更多的用途?我们不应该用+
来代替|
,除了可能混淆的代码之外,还有什么坚实的理由吗
我想可能会有一个额外的演员表演命中,但嘿,我们正在拯救一个角色!是的,一个微优化取代了另一个 因为
|
是一个或运算符,它的意义比+
更好,后者只是添加0+0
而导致false
当使用+
时,对false
和true
的0
和1
也进行了转换,人们可能不知道为什么添加了两个布尔值,但|
使这一点显而易见
最后
我想可能会有一个额外的演员表演命中,但
嘿,我们在救一个角色!是的,一个微观优化已经到位
另一个
额外施法>保存字符
false | | false
返回false
false+false
返回0
(隐式转换为false
)
是的,它确实起了作用,但是
|
是执行此操作的标准方法,正如在其他编程语言中看到的那样<代码>+肯定会让人感到困惑,最终,这是不正确的:
false | | true===true
istrue
false+true===true
isfalse
为什么+在这种情况下看不到更多的用途
以下是我想到的原因:
+
将始终计算表达式的两侧<如果左侧操作数是真的,则代码>|根本不会计算右侧操作数。对于if(boolean | | boolean)
;如果(func()| | func()),则对可能有很大影响
|
有这样一个功能:表达式的结果是第一个truthy操作数的值,而不是true
或false
,这非常有用<代码>+将产生一个数字或字符串,这将不太有用|
将测试其论点的真实性/错误性<代码>+会将它们转换为数字或字符串,具体取决于它在两侧看到的内容。因此,在很多情况下,|
和+
会给出不同的结果+
将要求您非常熟悉+
对两侧的各种类型所做的操作,从而降低代码的清晰度和维护难度考虑以下代码:
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");
}
还是个好主意吗?我会让优化器尽可能缩短代码的字符长度,并编写清晰的源代码。
+
的用法一点也不清楚,可能会让新开发人员困惑不已。“为什么+在这种情况下看不到更多的用法?”你能回答相反的问题吗?为什么有人会用+而不是| |?他们中的许多人可能会错误地投反对票。不过,有些人可能也会发现它没有用处。@ElliotBonneville多年来SO社区已经腐朽,这就是结果。我个人很害怕问一个问题。而且,我不同意那些投票结束的人的说法,即这主要是基于意见的问答。如果有+
和| |
行为根本不同的情况,那就不是意见。这是事实。如果你真的讨厌这个问题,我建议你撤回你的投票,或者换成其他的。我真的很喜欢这个答案。谢谢你对这件事的解释。转换为社区维基答案?这似乎是一个很好的例子。而且你并不需要积分;)@j08691:LOL是真的,尽管我只是把脑海中浮现的东西抛了出去,而不是总结社区的反应。