2013-06-25 162 views
0

什麼是更好的解決方案?真的檢查是否未定義typeof

if(typeof bla === "undefined" || bla === null)... 

或者

if(bla)... 

如果我做第二個方案,我真的需要檢查其是否不確定?

謝謝。

+3

答案是「這取決於你正在嘗試做什麼」。 – karim79

+0

「真的檢查是否未定義」......你的意思是說,還是你的意思是「未定義或空值」,因爲你在這些例子中也檢查null。 –

+0

一個屬性,當它沒有定義時,是未定義的。換句話說,這很明顯。 null是一個對象。它的類型爲null。未定義不是一個對象,它的類型是未定義的。這部分不太明顯。 http://stackoverflow.com/questions/6429225/javascript-null-or-undefined –

回答

3

這取決於你期望的變量包含。

如果它應該例如包含一個對象,第二個選項可以正常工作,因爲任何對象引用都是truthy。

如果它應該例如包含一個布爾值,第二個選項將根本不起作用,因爲false會給出與不存在的值相同的結果。

+0

所以可以肯定,檢查未定義和null是更好的解決方案? – Christian

+0

@Christian:這取決於你需要確定的東西。沒有適用於所有情況的理想方法。在某些情況下,「null」值可以是一個完全有效的值。 – Guffa

0

我真的需要檢查它的undefined嗎?

不,undefined和null都解析爲false。第二種選擇肯定更好。

0

「檢查未定義」,最好的解決方案通常是第三個:

Demo

function isDef(obj) { 
    var undefined; 
    return obj === undefined; 
} 

這用來檢查對象是未定義的,而不會丟失時間與typeof和這個測試沒有按如同您的第二次測試那樣,驗證爲"",null,NaN0爲真。

唯一的缺陷是有人可以覆蓋全局的undefined對象。在ES5嚴格模式下不可能,但是你的代碼應該避免這種情況。 Shadowing undefined與當地的var undefined;定義爲你做。

另外,通過使用isDef函數,您可以實現更好的便攜式縮小和更簡單的邏輯。

if (isDef(x)) { 
    // do something 
} else { 
    // do something else 
}; 
+0

行'var undefined;'add是什麼? – smerny

+1

@smerny在我看來,這條線是無用的保護。由於undefined不能在全局範圍內重新定義,因此只需檢查obj === undefined就可以更簡單,更智能。 –

相關問題