我知道,我知道必須有一些線程覆蓋此主題。但我使用了搜索功能,沒有得到符合我需求的答案。所以在這裏,我們去:JavaScript檢查null與undefined以及==和===之間的區別
如何檢查一個變量,如果它是
null
或undefined
是什麼null
和undefined
之間的區別?「==」和「===」之間的區別是什麼(難以搜索Google的
===
)?
我知道,我知道必須有一些線程覆蓋此主題。但我使用了搜索功能,沒有得到符合我需求的答案。所以在這裏,我們去:JavaScript檢查null與undefined以及==和===之間的區別
如何檢查一個變量,如果它是null
或undefined
是什麼null
和undefined
之間的區別?
「==」和「===」之間的區別是什麼(難以搜索Google的===
)?
如何檢查一個變量,如果它是
null
或undefined
...
是變量null
:
if (a === null)
// or
if (a == null) // but see note below
...但要注意後者也將如果a
是undefined
,則爲true。
是否undefined
:
if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below
...但再次,注意,最後一個是模糊的;如果a
是null
也是如此。
現在,儘管上述情況,以檢查那些通常的方法是使用一個事實,即他們是falsey:
if (!a) {
// `a` is falsey, which includes `undefined` and `null`
// (and `""`, and `0`, and `NaN`, and [of course] `false`)
}
這是由ToBoolean在規範中定義。
...和
null
和undefined
之間有什麼區別?
它們都是通常用於表示缺少某些東西的值。 undefined
是更通用的函數,用作變量的默認值,直到它們被賦予其他值,作爲函數調用時未提供的函數參數的值,以及當您詢問函數時獲得的值它不具有的屬性的對象。但它也可以明確地用於所有這些情況。 (有不具有對象的屬性,並與值undefined
具有屬性之間的差;有主叫與值undefined
一個函數的參數,並且在離開該參數完全關閉之間的差。)
null
是略高於undefined
:這是一個空白對象參考。當然,JavaScript是鬆散類型的,但並不是所有與JavaScript交互的東西都是鬆散類型的。如果像瀏覽器中的DOM這樣的API需要空白的對象引用,我們使用null
而不是undefined
。同樣,DOM的getElementById
操作返回對象引用 —或者是有效的(如果它找到了DOM元素)或null
(如果沒有)。
有趣(或不),他們是他們自己的類型。也就是說,null
是空類型中唯一的值,而undefined
是未定義類型中的唯一值。
是什麼「==」和「===」之間的區別
他們之間的唯一區別是,==
將做強制類型轉換,試圖獲取值匹配,並===
慣於。因此,例如"1" == 1
爲真,因爲"1"
強制爲1
。但"1" === 1
是虛假,因爲類型不匹配。 ("1" !== 1
爲真。)===
的第一個(實際)步驟是「操作數的類型是否相同?」如果答案是「否」,則結果爲false
。如果類型相同,則它確實是==
所做的。
類型強制使用相當複雜的規則,並可能有令人驚訝的結果(例如,"" == 0
是真實的)。
更多在spec:
==
,也被稱爲 「鬆散」 平等)===
)的差異是微妙的。
在JavaScript中,undefined
變量是一個從未聲明或從未分配過值的變量。假設您例如宣佈var a;
,那麼a
將爲undefined
,因爲它從未被分配任何值。
但是,如果您然後分配a = null;
那麼a
現在將是null
。在JavaScript中,null
是一個對象(如果您不相信我,請在JavaScript控制檯中嘗試typeof null
),這意味着null是一個值(實際上即使undefined
是一個值)。
實施例:
var a;
typeof a; # => "undefined"
a = null;
typeof null; # => "object"
這可以證明在函數參數是有用的。你可能想要一個默認值,但是認爲null是可以接受的。在這種情況下,你可以這樣做:
function doSomething(first, second, optional) {
if (typeof optional === "undefined") {
optional = "three";
}
// do something
}
如果省略optional
參數doSomething(1, 2) then
可選的將是"three"
字符串,但如果你通過doSomething(1, 2, null)
然後任選將null
。
至於等於==
和嚴格等於===
比較,第一個是弱類型,而嚴格等於也檢查值的類型。這意味着0 == "0"
將返回true;而0 === "0"
將返回false,因爲一個數字不是一個字符串。
您可以使用這些運營商undefined
的null
之間進行檢查。例如:
null === null # => true
undefined === undefined # => true
undefined === null # => false
undefined == null # => true
最後一種情況是有趣的,因爲它可以讓你檢查,如果一個變量或者是未定義或爲空,沒有別的:
function test(val) {
return val == null;
}
test(null); # => true
test(undefined); # => true
很好的解釋! – 2015-09-01 09:07:27
Kyle Simpson聲稱typeof null返回「object」是一個錯誤:https://github.com/getify/You-Dont-Know-JS/blob/master/up%20&%20going/ch2.md#values--types – Berzerk 2015-12-14 15:53:36
不確定
這意味着該變量尚未初始化。
實施例:
var x;
if(x){ //you can check like this
//code.
}
等於(==)
它只檢查值是等於不數據類型。
實施例:
var x = true;
var y = new Boolean(true);
x == y ; //returns true
因爲它檢查只值。
嚴格等於(===)
檢查值和數據類型應該是相同的。
實施例:
var x = true;
var y = new Boolean(true);
x===y; //returns false.
因爲它檢查數據類型x是原始類型,y是一個布爾對象。
The spec是去充分回答這些問題的地方。這裏有一個總結:
x
,您可以:它===
直接比較的null
。示例:x === null
undefined
:與undefined
或typeof
直接比較。對於various reasons,我更喜歡typeof x === "undefined"
。==
來檢查它是否爲null
和undefined
之一,並依靠略微的奧術類型強制規則,這意味着x == null
完全符合您的要求。 ==
和===
之間的基本區別是,如果操作數是不同類型的,===
總是返回false
而==
就會將一個或兩個操作數爲相同類型的使用rules導致一些輕微不直觀的行爲。如果操作數是相同類型的(例如,都是字符串,比如上面的typeof
比較),==
和===
的行爲將完全相同。更多閱讀:
如果你的(邏輯)檢查是一個否定(!),並且要同時捕獲JS null
和'Undefined'
(爲不同的瀏覽器會給你不同的結果),你可以使用限制較少的比較: 如:
var ItemID = Item.get_id();
if (ItemID != null)
{
//do stuff
}
這將捕獲兩個null
和'Undefined'
如果你想檢查null
或undefined
但不依賴於單純的錯誤,您也可以使用此reusable is-nil component決定val
引用爲空還是未定義。
例子:
isNil(null) // => true
isNil('') // => true
空字符串,例如,它會返回false。
如何檢查一個變量,如果它是null或undefined
只是檢查,如果一個變量有這樣一個有效值:
if(variable)
如果變量不,它會返回true t包含:
2之間的差'=='和''===是公[此處描述] (http://jquery-howto.blogspot.com/2012/11/jquery-double-tripple-equal-difference.html)。 – Uzbekjon 2013-02-14 09:37:55
1.使用===而不是== JavaScript使用兩種不同類型的相等運算符:=== | !==和== | !=在比較時始終使用前一組被認爲是最佳做法。 「如果兩個操作數具有相同的類型和值,則===會生成true,並且!==會生成false。」 - JavaScript:好的部分 但是,使用==和!=時,在使用不同類型時會遇到問題。在這些情況下,他們會試圖強制價值觀,但不成功。 HTTP://code.tutsplus。com/tutorials/24-javascript-best-practices-for-beginners -net-5399 – jasonleonhard 2014-12-19 20:23:41
您可以搜索Google:「嚴格平等運營商」 - 獲取非常相關的結果 – Danield 2015-11-17 10:41:15