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