2013-04-17 69 views
0

在JavaScript中,我有一個對象的屬性,我試圖訪問,只有它是可用的,所以我做條件空/未定義的檢查使用該對象之前。IE有條件檢查

if(object !== undefined && object != null) // Occurs in IE8 
{ 
    // Use object 
    // Object.someProperty 
} 

在FF &瀏覽器,如預期所定義的行爲。當他們看到object爲null時,它不會進入if語句中。然而,在IE中,它抱怨不應該訪問「someProperty」,因爲Object是空的,並且無論如何。但這就是爲什麼我的條件檢查是在那裏,Chrome實現了它。

我的問題是,爲什麼即使在if語句嘗試使用時,有條件檢查停止它的對象執行行?

此外,解決這個問題如下:

if(object !== undefined && object != null && true) 
{ 
    // Use object 
    // Object.someProperty 
} 

的通知 「& &真正的」 undefined和null檢查後。這似乎迫使IE認識到這種情況應該真正評估爲假,並且它按預期工作。

所以雖然似乎有一種方法來「使其工作」,我的上述問題仍然存在。

在此先感謝你們!如果你沒有定義或聲明它,object只應null如果明確將其設置爲null

+0

這是IE8只?你有沒有試過其他的IE版本? – Spudley

+2

顯示什麼'對象'是 – Ian

+0

請顯示一個我們可以重現的真實測試用例。通常,'object!= null'就足夠了,因爲與'null'的寬鬆比較也會將強制轉換爲'undefined'。 –

回答

2

object只能是不確定的。

object一個例子是undefined

var object; 

object一個例子是null

var object = null; 

我會檢查它與方式:

if (object) { 

} 

這將確保object並不是虛假的。要falsey,它是下列值之一:

false 
0 
-0 
"" 
null 
undefined 
NaN 

如果你不知道,object是曾經宣佈過,你需要檢查它的類型:

if (typeof object !== "undefined") { 

} 

但是,如果你需要還看它是否不爲空,然後使用:

if (typeof object !== "undefined" && object !== null) { 

} 

當然,你可以用它作爲truthy結合typeof檢查:

if (typeof object !== "undefined" && object) { 

} 

如果以後需要檢查它是否有一個屬性,使用:

if ("someProperty" in object) { 

} 
+0

'NaN'和'-0'也是錯誤的。 –

+0

@MikeSamuel我剛剛意識到'NaN'在你評論之前。雖然沒有考慮過'-0'。我會添加它們兩個。謝謝:) – Ian

+0

我試過「typeof obj!==」undefined「」和我第一次嘗試解決這個實際使用if(!obj)。實際上幾乎每種類型的無效數據檢查,以確保它不會進入if語句。我試圖在JSFiddle上重現它。不知道那些非虛假的價值,但是,謝謝。 – Ryan