我目前正在練習javascript,目前我在物體檢測方面遇到了問題。我想創建一個對象並檢測它是否存在。以下是我目前使用的一些示例代碼。JavaScript對象檢測
下面的代碼示例是我如何創建我的對象。
var obj = obj || {};
我該用這個嗎?
if (typeof obj !== "undefined") {
// code
}
或者這個?
if (obj !== null) {
}
我目前正在練習javascript,目前我在物體檢測方面遇到了問題。我想創建一個對象並檢測它是否存在。以下是我目前使用的一些示例代碼。JavaScript對象檢測
下面的代碼示例是我如何創建我的對象。
var obj = obj || {};
我該用這個嗎?
if (typeof obj !== "undefined") {
// code
}
或者這個?
if (obj !== null) {
}
值undefined
表示該變量未被賦值。值null
表示它已分配值null
。 ===
運營商(及其否定,!==
)阻止type coercion。
這是對的嗎?這完全取決於你想要完成的事情。 undefined
和null
都是「falsy」值,表示每個值在布爾上下文中評估爲false
(如false
,0
和空字符串)。
注意,如果obj
是null
,然後typeof obj
是不"undefined"
。
通常的做法是使用:
var obj = obj || {};
當代碼運行,你可以肯定的是obj
已被定義(因爲var
聲明的),儘管它可能沒有被賦值。
如果obj
的值解析爲「falsey」值,那麼您將分配一個對新對象的引用。
可能的結果是:
如果obj
尚未分配的值,一個新的對象引用被分配。
如果obj
先前被賦予了「falsey」值,它將被替換爲新的對象引用(這可能與分配給它的falsey值的任何代碼混淆)。
如果之前已爲obj
分配了「truethy」原始值,則對obj
的以下屬性分配將引發錯誤並停止腳本執行。
如果obj
已經是對除null
以外的對象的引用,則隨後的屬性賦值將是該對象。取決於對象的類型,事情可能沒有問題。或不。據推測,你的控制之外的東西創造了這個物體,因此可能在你不知情的情況下修改或銷燬它。你會怎麼做?
這是不可能的JavaScript處理,一般案件2和3或4它不是你obj
你與dealiing。所以用一個不太可能與其他人衝突的名字,並希望你得到#1或#4,並且事情順利。
順便說一句,即使您在代碼執行的位置擁有#1,代碼在您的代碼後面添加仍然可能會導致(或多或少)在#4中。
沒有額外的好處就像測試:
if (typeof obj == 'undefined')
因爲它的結果基本上是相同的。
1.沒有'!==='。 2.你沒有解釋你真的需要什麼。根據** real **目標,解決方案可能會有所不同 – zerkms 2012-07-20 02:37:22
爲什麼不簡單地使用'var obj = {}'創建一個新對象? – 2012-07-20 02:39:38
如果您將obj設置爲{},那麼它不能爲null或未定義。 – epascarello 2012-07-20 02:40:38