【问题标题】:Can this Expression be simplified这个表达式可以简化吗
【发布时间】:2017-07-01 00:18:17
【问题描述】:

我需要简化这个表达式

  var foo = (!A && B && C) || (A && B && !C) ;

谁能建议使用最少运算符的良好简化?

【问题讨论】:

    标签: javascript boolean boolean-logic boolean-expression


    【解决方案1】:

    B在这两种条件下都是通用的,可以使用rest条件运算符。

    var foo = B && (A ? !C : C);
    

    这是一个异或操作,请阅读Logical XOR in JavaScript

    【讨论】:

    • 酷。善用有条件的。
    • 我只花了 5 分钟思考不同的组合,这是我认为在可读性和简单性方面最好的。
    • @Satpal 谢谢。我认为这是最好的简化。
    【解决方案2】:

    由于(!A && C) || (A && !C)是XOR的扩展,你可以用XOR表达式替换那部分:

    var foo = B && (!!A ^ !!C);
    

    【讨论】:

    • 双感叹号!!没有意义,应该去掉。
    • @PatrickTrentin 他们很有道理。 !!4 ^ !!80(虚假),但 4 ^ 812(真实)。 !!"nonempty" ^ !!""1(真实),但 "nonempty" ^ ""0(虚假)。
    猜你喜欢
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多