[英]How to check if variable is null, but allow 1 and 0?
我目前使用以下代碼
if (oldValue) ...
在oldValue
為null
情況下,它很好用,但在為0的情況下,當我期望為true
時,它也返回false
。 因此,我應該如何檢查null
值? 我在想
if (oldValue!=null) ...
但它沒有按我預期的那樣工作。
要直接回答您的問題,如果允許的值為0
和1
, if
語句應類似於:
if (0 === oldValue || 1 === oldValue) {
...
}
(我認為)這是陳述允許使用哪些值的最清晰方法。
有關更多詳細信息,請參見以下內容:
這與真實和虛假的價值觀有關。
null
為false
,與0
, ""
, undefined
和NaN
,它們被稱為偽造的值。
同樣,某些值評估為true
。 例如: "a string"
, "0"
(非空字符串“ 0”),除0
以外的任何數字(包括負數), Array
和Object
(甚至是空的)。 這些是真實的價值觀。
有一些意外的結果:
"" == false // true
0 == false // true
但:
NaN == false // false
null == false // false
實際上,您應該始終使用標識運算符===
而不是等於( ==
)。 這樣可以確保您知道變量的預期類型(字符串,數字,對象)以及異常狀態是什么。
一些例子:
0
。 巧合的是,這是一個虛假的值。 parseInt
或parseFloat
特殊情況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.