2010-05-06 23 views
67

在JavaScript中你可以聲明一個變量,如果它是undefined,你可以檢查variable == undefined;我知道這一點,但是如何比較一個你不知道的值呢?如何將變量與未定義的比較,如果我不知道它們是否存在?

例如,我有一個當用戶點擊一個按鈕時創建的類。在此之前,班級是未定義的 - 它不存在任何地方;我怎麼能比較它?

有沒有辦法不用try - catch

回答

141

最好的方法是檢查型號,因爲JS中10/null/false是一件棘手的事情。 所以:

if(typeof obj !== "undefined") { 
    // obj is a valid variable, do something here. 
} 

注意typeof總是返回一個字符串,如果變量完全不存在不產生錯誤。

+12

使得'if(typeof obj!==「undefined」){}'它是完美的(注意第二個等號) – raveren 2012-06-11 14:33:33

+2

什麼是詭計?爲什麼不只是像Timmys的回答一樣直接比較? – Alex 2016-02-09 13:43:12

+5

你現在可以使用'obj!== undefined'。 'undefined'曾經是可變的,就像'undefined = 1234'什麼會導致有趣的結果。但是在Ecmascript 5之後,它不再可寫,所以我們可以使用更簡單的版本。 http://www.codereadability.com/how-to-check-for-undefined-in-javascript/ – 2016-03-15 20:50:06

2
if (document.getElementById('theElement')) // do whatever after this 

對於拋出錯誤,測試父對象,而不是僅僅是變量名的屬性名未定義的東西 - 所以不是:

if (blah) ... 

做:

if (window.blah) ... 
-1
if (!obj) { 
    // object (not class!) doesn't exist yet 
} 
else ... 
+0

obj可能很好地存在,但是是假的或0. – andig 2015-06-19 07:23:34

+0

常規對象不能只是'false'或'0'。它應該包含'key - > value'對,或者是空的,或者未定義的,或者是null。 – Thevs 2015-06-20 06:15:49

+0

雖然這不是問題。僅僅因爲你調用了一個變量obj,它可能仍然是任何imho。 – andig 2015-06-21 09:03:38

1

!undefined是在JavaScript真實的,所以如果你想知道你的變量或對象是否是不確定的,要採取行動,你可以做這樣的事情:

if(<object or variable>) { 
    //take actions if object is not undefined 
} else { 
    //take actions if object is undefined 
} 
+0

感謝您的時間,但是,我這種情況下,如果您嘗試比較未聲明的變量你會得到一個錯誤提示,說你還沒有聲明變量......所以不可能比較它......所以,爲什麼你需要以一種字符串格式來變換變量的類型以便比較它的成功 例如 如果(類型myundeclaredvarible ==的「不確定」)//做一些事情最好內厄姆@Rahul潘迪 – ncubica 2011-07-06 20:06:49

+0

你已經編輯的最後一個是相當冷靜永遠感謝:) – ncubica 2011-11-15 19:52:11

32
if (obj === undefined) 
{ 
    // Create obj 
} 

如果你正在做的廣泛的JavaScript編程,你應該習慣使用===和!==當你想做一個類型特定的檢查。

另外,如果你打算做相當數量的javascript,我建議通過JSLint運行代碼http://www.jslint.com它看起來可能有點惡作劇,但JSLint警告你的大部分事情最終會回來咬你。

+3

+1與JSLint的持續和直接比較以前見過到undefined – Ascherer 2013-01-14 17:51:35

+0

還有jshint – Martin 2014-06-26 18:01:59

+0

什麼是一個不是「未定義」的事物將會是「未定義」的情況? – 2014-09-19 19:56:22

相關問題