[英]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.