为什么“(state==1&&3)”有意义

Why does `(state == 1 && 3)` make sense?

本文关键字:amp 有意义 为什么 state      更新时间:2023-09-26

我在Mithril.js:中发现了这段代码

finish(state == 1 && 3)

在我(Java/C程序员)看来,如果state1,它似乎应该总是调用finish(true);如果state不是1,它应该调用finish(false)。但它实际上似乎为前者做了finish(3),为后者做了finish(false)

这背后的逻辑是什么?

这在JavaScript中是惯用的,还是一个坏主意?对我来说,这太晦涩了。

您可以这样解释运算符||&&

    A || B
→   A ? A : B
    A && B
→   A ? B : A

但未对CCD_ 12进行两次评估。

这是JavaScript的一个特性,&和||运算符总是返回它计算的最后一个值。

在JavaScript中,&&运算符不会将结果强制为布尔值。相反,它类似于:

var _temp = state == 1;
finish(_temp ? 3 : _temp);

测试左侧的真实性,然后在truthy时返回右侧,否则返回左侧。

比较a && b实际返回的值是表达式中最后一个求值的值,而不是truefalse

您可以参考规格:

产品LogicalANDExpression&BitwiseORExpression的评估如下:

  1. lref是求值LogicalANDExpression的结果
  2. lval为GetValue(lref
  3. 如果ToBoolean(lval)为false,则返回lval
  4. rref是评估BitwiseORExpression的结果
  5. 返回GetValue(rref