Javascript 使用+不好吗;代替| |?

Javascript 使用+不好吗;代替| |?,javascript,Javascript,刚刚注意到JS中自动类型转换的一个特殊副作用: if (false || false) { } 同: if (false + false) { } 并且(false | | true)和(false+true)都将返回相同的结果(true) 为什么+在这种情况下看不到更多的用途?我们不应该用+来代替|,除了可能混淆的代码之外,还有什么坚实的理由吗 我想可能会有一个额外的演员表演命中,但嘿,我们正在拯救一个角色!是的,一个微优化取代了另一个 因为|是一个或运算符,它的意义比+更好,后者只是

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

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
is
true

false+true===true
is
false

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

以下是我想到的原因:

  • 人们不想使用它,因为他们在思考逻辑,而不是数学

  • +
    将始终计算表达式的两侧<如果左侧操作数是真的,则代码>|根本不会计算右侧操作数。对于
    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是真的,尽管我只是把脑海中浮现的东西抛了出去,而不是总结社区的反应。