1 && 2 && 3返回3。有人可以解释为什么

时间:2019-07-19 13:17:31

标签: javascript

我最近在一次采访中被问到了这个问题。 我知道在JavaScript中评估从左到右。 1 && 2应该是假的吧? 我在这里读到另一个问题,即1 && 2返回2。而AND返回第一个伪造的值。但是感觉模糊。有人可以详细说明吗?

6 个答案:

答案 0 :(得分:8)

1 && 2 && 3 

相同

if (1) {
    if (2) {
        if (3) {
          return 3
        } else {
          return 3
        }
    } else {
        return 2
    }
} else {
    return 1
}


1 && 2 && 3  //3
1 && 0 && 3  //0
1 && false && 3  //false
false && 0 && 3  //false
1 && 0 && false  //0

答案 1 :(得分:7)

AND(&&)运算符执行以下操作:

  • 从左到右评估操作数。

  • 对于每个操作数,将其转换为布尔值。如果结果为假,则停止并返回该操作数的原始值。

  • 如果所有操作数都已求值(即全部为真),则返回最后一个操作数。

换句话说,AND返回第一个伪造的值,或者如果没有找到,则返回最后的值。当所有值均为真时,将返回最后一个值。

参考:https://javascript.info/logical-operators

  

1 && 2应该是错误的吧?

不,在Java脚本中的布尔上下文中,这些值被转换为truthy。只有六个值被转换为falsy,它们是:false0,空字符串(例如''""),{{ 1}},nullundefined

答案 2 :(得分:1)

如果&&的左侧为假值,则整个表达式的值为左侧。

否则,它的评估结果为右侧。

这就是datatables给您3的原因。

答案 3 :(得分:1)

如果所有值均为真,则

logical AND &&返回最后的truthy值,或者首先找到的falsy值。

brands: [
  0:ZARA: {product: "ZARA Black Shiny Shirt",fit: "Slim Fit",size: "46"},
  1:H&M: {product: "H&M Black Shirt",fit:50 "Regular Fit",size: "44"}
]

答案 4 :(得分:0)

&&是表达式的布尔AND运算符。对部分表达式的求值照常进行。结果不是布尔值,而是解释为“真”或“虚假”(由12.13 of the ECMAScript standard表示)。
   因此,JS引擎必须评估所有表达式,直到找到的第一个虚假值(然后,总结果就是该第一个虚假值,解释为false),直到没有其他表达式为止。 />    该标准要求从左到右进行评估(12.13.3 of ECMAScript standard)。

Falsy / Truthy的确切定义是:

  • 虚假:
    false0""nullundefinedNaN之一
  • Truthy:
    除非是虚假,否则始终如此。

这在section 7.1.2 of the standardToBoolean函数的定义中指定。另请参阅MDN上的词汇表以获取清晰摘要(falsytruthy

答案 5 :(得分:0)

0以外的所有数字在&上执行&&时返回true,并且当所有操作数为true时&&返回正确的值1 && 2返回2,而2 && 3将返回3