2012-07-20 146 views
1

我目前正在練習javascript,目前我在物體檢測方面遇到了問題。我想創建一個對象並檢測它是否存在。以下是我目前使用的一些示例代碼。JavaScript對象檢測

下面的代碼示例是我如何創建我的對象。

var obj = obj || {}; 

我該用這個嗎?

if (typeof obj !== "undefined") { 
    // code 
} 

或者這個?

if (obj !== null) { 

} 
+0

1.沒有'!==='。 2.你沒有解釋你真的需要什麼。根據** real **目標,解決方案可能會有所不同 – zerkms 2012-07-20 02:37:22

+0

爲什麼不簡單地使用'var obj = {}'創建一個新對象? – 2012-07-20 02:39:38

+0

如果您將obj設置爲{},那麼它不能爲null或未定義。 – epascarello 2012-07-20 02:40:38

回答

3

undefined表示該變量未被賦值。值null表示它已分配值null===運營商(及其否定,!==)阻止type coercion

這是對的嗎?這完全取決於你想要完成的事情。 undefinednull都是「falsy」值,表示每個值在布爾上下文中評估爲false(如false0和空字符串)。

注意,如果objnull,然後typeof obj"undefined"

0

通常的做法是使用:

var obj = obj || {}; 

當代碼運行,你可以肯定的是obj已被定義(因爲var聲明的),儘管它可能沒有被賦值。

如果obj的值解析爲「falsey」值,那麼您將分配一個對新對象的引用。

可能的結果是:

  1. 如果obj尚未分配的值,一個新的對象引用被分配。

  2. 如果obj先前被賦予了「falsey」值,它將被替換爲新的對象引用(這可能與分配給它的falsey值的任何代碼混淆)。

  3. 如果之前已爲obj分配了「truethy」原始值,則對obj的以下屬性分配將引發錯誤並停止腳本執行。

  4. 如果obj已經是對除null以外的對象的引用,則隨後的屬性賦值將是該對象。取決於對象的類型,事情可能沒有問題。或不。據推測,你的控制之外的東西創造了這個物體,因此可能在你不知情的情況下修改或銷燬它。你會怎麼做?

這是不可能的JavaScript處理,一般案件2和3或4它不是你obj你與dealiing。所以用一個不太可能與其他人衝突的名字,並希望你得到#1或#4,並且事情順利。

順便說一句,即使您在代碼執行的位置擁有#1,代碼在您的代碼後面添加仍然可能會導致(或多或少)在#4中。

沒有額外的好處就像測試:

if (typeof obj == 'undefined') 

因爲它的結果基本上是相同的。