繁体   English   中英

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

[英]Why does “0 && true” return 0 in javascript instead of a boolean?

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

0 && true
> 0

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

背景故事 - 我对jQuery中的这个陈述感到困惑:

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

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

也许有一些聪明的理由为什么会这样,但不能说我喜欢它。

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

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

这就是为什么返回第一个值: 0

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

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

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

!!(0 && true)

或使用Boolean

Boolean(0 && true)

正如@MaximeChéramy所指出的,JavaScript会检查第一个元素是否返回false并且它不会真正检查第二个元素。 这节省了计算时间。

JS不需要检查两个语句,如果第一个是false,它不会检查第二个语句,它只会返回第一个语句。 如果第一个是真的,那么它不会检查第二个,它只是返回它。

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

使用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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM