2012-09-21 422 views
16

我似乎對objects要使用此測試很多的Javascript測試(對象&&對象!==「空」 &&對象!==「未定義」)

if(object && object !== "null" && object !== "undefined"){ 
    doSomething(); 
} 

我回來,從服務呼叫或從閱讀cookies(因爲不同的瀏覽器返回不同的值nullundefined,"null""undefined")。

有沒有更容易/更有效的方法來做這個檢查?

+3

如果它實際上可能有字符串值'「null」'和'「undefined」',那麼你的方法不能更簡單。 –

+0

它確實有字符串「null」或「undefined」。感謝您的確認。 –

+0

您也可以使用'!!'如'if(!! myobj){doSomething();}'來檢查對象。它將對象轉換爲布爾值,然後再次將其反轉。看看[這](http://stackoverflow.com/a/10597474)答案是一個非常好的解釋。 –

回答

23

我不認爲你可以做任何簡單,但你肯定可以重構這個邏輯成一個函數:

function isRealValue(obj) 
{ 
return obj && obj !== 'null' && obj !== 'undefined'; 
} 

然後,至少你的代碼變成:

if (isRealValue(yourObject)) 
{ 
doSomething(); 
} 
+0

我喜歡你的答案,因爲它是可重用的,**非常**可讀。但是,我只是發現了一種更有效的方式來進行實際檢查。 –

1

也許這樣

if (typeof object !== "undefined" || object !== null) 
    // do something 
+0

'object'是[不是保留字](http://es5.github.com/#x7.6.1.1)。 –

+0

@JamesAllardice。你有權利。我刪除了評論 –

+0

這是不是等同於原來的功能呢?他正在專門檢查一個值爲「null」的字符串。請參閱:http://jsfiddle.net/7eYKN/ – aquinas

4

如果object是真的,我們已經知道它不是nullundefined(假設字符串值是錯誤的)。我假設沒有null而不是undefined測試是想要的。

如果是這樣,與nullundefined的簡單比較是比較!= null

if(object != null){ 
    doSomething(); 
} 

如果object既不是null也不undefineddoSomething功能纔會運行。

+0

否:「它有時會有字符串」空「或」未定義「。」如果值中有一個REAL字符串,這將不起作用:http://jsfiddle.net/7eYKN/1/ – aquinas

+0

@aquinas:我在該問題下看到該評論,但沒有足夠的代表回覆。那麼問題將是「有時」的含義。我認爲提問者給我們一些印象性的代碼而不是實際的代碼表示。是的,一個人有時可能想要與'「null」字符串進行比較,但這並不常見,但由於typeof foo ===「undefined」,因此更常見到「undefined」字符串。 '。所以我的答案試圖找到通常想要的核心,因爲這個問題似乎並不代表任何常見的現實世界的例子。 – scatter

+0

@aquinas:如果我有更多的代表,我也會評論SnakeEyes代碼總是會給出一個「真實」結果。 – scatter

10

如果你有jQuery,你可以使用$ .isEmptyObject()。

$.isEmptyObject(null) 
$.isEmptyObject(undefined) 
var obj = {} 
$.isEmptyObject(obj) 

所有這些調用都將返回true。希望它有幫助

+2

不要用jQuery來回答JavaScript問題。 jQuery不向後兼容JavaScript,它不斷改變發佈的事情,當你的瀏覽器已經可以處理* real * JavaScript時,你在這裏或者那裏通過在客戶端上轉儲70KB來節省1KB,並且與知道如何編程。 – John

2
if(!!object){ 
    doSomething(); 
}