簡體   English   中英

如何檢查變量是否為空,但允許1和0?

[英]How to check if variable is null, but allow 1 and 0?

我目前使用以下代碼

if (oldValue) ...

oldValuenull情況下,它很好用,但在為0的情況下,當我期望為true時,它也返回false 因此,我應該如何檢查null值? 我在想

if (oldValue!=null) ...

但它沒有按我預期的那樣工作。

要直接回答您的問題,如果允許的值為01if語句應類似於:

if (0 === oldValue || 1 === oldValue) {
     ...
}

(我認為)這是陳述允許使用哪些值的最清晰方法。

有關更多詳細信息,請參見以下內容:


這與真實虛假的價值觀有關。

nullfalse ,與0""undefinedNaN ,它們被稱為偽造的值。

同樣,某些值評估為true 例如: "a string""0" (非空字符串“ 0”),除0以外的任何數字(包括負數), ArrayObject (甚至是空的)。 這些是真實的價值觀。

有一些意外的結果:

"" == false     // true
0 == false      // true

但:

NaN == false    // false
null == false   // false

實際上,您應該始終使用標識運算符===而不是等於( == )。 這樣可以確保您知道變量的預期類型(字符串,數字,對象)以及異常狀態是什么。

一些例子:

  • 如果從輸入字段獲取值,則該值將始終是字符串-特殊情況是空字符串。 巧合的是,這是一個虛假的值。
  • 如果要計數元素,並且在沒有元素的情況下需要做一些特殊的事情-特殊情況是0 巧合的是,這是一個虛假的值。
  • 如果您嘗試使用parseIntparseFloat特殊情況NaN (使用isNaN()檢查isNaN()從字符串中解析數字。 巧合的是,這是一個虛假的值。
  • 如果要使用indexOf檢查字符串中是否存在子字符串-特殊情況為-1 (因為0是有效索引)。 不是一個falsy價值,但if(str.indexOf(substr))肯定是錯誤的,因為目前還不清楚筆者知道的可能是允許值0 (這 falsy)

這里的要點是:特殊情況通常是明確定義的。 利用線束可以始終使用標識運算符=== 等於運算符==和偽造是錯誤的常見來源。

以供參考:

"" === false    // false
0 === false     // false
NaN === false   // false
null === false  // false
false === false // true (of course)
NaN === NaN     // strange, but makes sense
"a" === "a"     // yay!

簡短答案:如果您想准確測試變量是否不具有null ,則將代碼更改為:

if (oldValue !== null) ...

(但是,您應該考慮是否可能undefined oldValue而不是null ,這將是一個單獨的情況。)

有關== / !==== / !==之間差異的詳細信息,請參見Frits van Campen的答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM