为什么`(state == 1 && 3)`有意义?

Law*_*Dol 10 javascript

我在以下代码中遇到过Mithril.js:

finish(state == 1 && 3)
Run Code Online (Sandbox Code Playgroud)

对于我的(Java/C程序员)来说,它看起来应该总是调用,finish(true)如果state1,finish(false)如果state不是1.但它实际上似乎是finish(3)针对前者和finish(false)后者.

这背后的逻辑是什么?

这是JavaScript中的惯用语,还是一个坏主意?对我而言,这是非常模糊的.

kay*_*kay 13

您可以解释运算符||,&&如下所示:

    A || B
?   A ? A : B

    A && B
?   A ? B : A
Run Code Online (Sandbox Code Playgroud)

但没有评估A两次.


Jon*_*ski 8

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

var _temp = state == 1;
finish(_temp ? 3 : _temp);
Run Code Online (Sandbox Code Playgroud)

测试感实性的左侧,然后返回或者权当truthy或左其他.


Loc*_*age 8

它是JavaScript,&&和||的特征 运算符始终返回它评估的最后一个值.

  • 所以它相当于`finish(state == 1?3:false)`,哪个IMO更清晰?增加对JavaScript的熟悉程度是否会减少OP成语的模糊性? (3认同)
  • @LawrenceDol:是的,熟悉程度更清晰.虽然我认为`||`更常用.通常用于默认值.(`a = a ||'default';`作为以'a`作为参数的函数的第一行 (2认同)