为什么“ 0 && true”在JavaScript中返回0而不是布尔值?

时间:2018-09-14 06:42:52

标签: javascript

我确信Javascript中的任何逻辑表达式都将返回布尔值,但是该表达式返回数字0而不是布尔值:

0 && true
> 0

为什么会这样?在这种情况下,如何在Javascript中处理逻辑表达式以防止将来出现这种错误?

背景故事-我对jQuery中的这一说法感到困惑:

$('.something').toggle(0 && true);

它不会切换元素,因为返回的是“ 0”,而不是布尔值!

也许是有一些聪明的原因,但是不能说我喜欢它。

2 个答案:

答案 0 :(得分:8)

有关&&运算符的文档说:

  

expr1 && expr2:如果可以转换为expr1,则返回false;否则,返回expr2

这就是为什么它返回第一个值的原因:0

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Description

您期望结果为false(布尔值),但是结果值的布尔值也是虚假的。这意味着您可以在条件(if)中使用它,并具有预期的行为。

如果需要将其存储在变量中并且更喜欢具有布尔值,则可以对其进行转换。可以使用双重否定来完成:!!

!!(0 && true)

或使用Boolean

Boolean(0 && true)

答案 1 :(得分:2)

正如@MaximeChéramy指出的那样,JavaScript检查第一个元素是否返回false,而实际上不检查第二个元素。这样可以节省计算时间。

如果第一个语句为false,则JS不需要检查两个语句,它不会检查第二个语句,而只是返回第一个语句。再者,如果第一个为true,则不检查第二个,而是返回它。

数字,对象,数组或字符串是真实的。

使用Boolean()获取布尔值或使用short方法!!()

'banana' && true  // returns true

但是

true && 'banana' // returns 'banana'
Boolean(true && 'banana') // returns 'true'
!!(true && 'banana') // returns 'true'

有三个

true && 'banana' && 1 // returns 1
true && 1 && 'banana' // returns 'banana'
1 && 'banana' && true // returns true
Boolean(true && 'banana' && 1) // returns 'true'
!!(1 && 'banana' && true) // returns 'true'