簡體   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