2014-01-25 62 views
0

我在Javascript中遇到了一個輕微的問題,即以奇怪的方式處理對象(至少可以),除非我錯過了某些東西。如果一個對象的屬性爲null,則爲「對象爲空」錯誤

我有一個對象名爲state。當我做console.log(state)我得到這個:

see image please

在這一點上,我嘗試使用過的對象去jQuery的each

$.each(state, function (i, sobj) { 
     if(mid == sobj.user_id) 
      //some stuff; 
    }); 

不過,在這裏我得到一個錯誤說TypeError: sobj is null。我發現這是因爲對象內的trump屬性(見上圖)初始化爲null。有了任何其他價值,它的作品。很明顯,我可以通過將其初始化爲0來解決這個問題,但是這在概念層面上讓我感到困惑:爲什麼不應該允許其中一個屬性具有null作爲其值?對我來說,當我像這樣循環它時,我應該得到一個錯誤,說整個對象爲null,只是因爲其中一個屬性爲null。我沒有專門爲這個房產做任何事情。因此,有人可以告訴我爲什麼會發生這種情況(谷歌沒有幫助),除了明顯的「不要讓任何東西在對象內爲空」之外,還有其他方法可以解決這個問題嗎?

+0

「爲什麼不應該允許其中一個屬性的值爲null?」那麼,屬性*被允許爲空作爲一個值。但是如果其中一個屬性有一個空值,那麼你*不被允許獲得它的'user_id'(因爲'null'沒有'user_id') – Gareth

+0

在我看來,你的'state'對象應該有一個新的'seat'屬性,它包含一個'user'對象的數組。那麼你可以遍歷這些,而不是迭代*所有*的狀態屬性 – Gareth

+0

這會節省時間表現方式還是僅僅是「最佳實踐」的情況? – jovan

回答

1

看來你只想迭代裏面的對象state對象。您可以檢查該項目是否爲對象。

$.each(state, function (i, sobj) { 
    if(typeof(sobj) == "object" && mid == sobj.user_id) 
     //some stuff; 
}); 
+0

我真的只需要循環中1,2,3和4的'seat'和'user_id',剩下的對象稍後進場。 – jovan

1

你正在遍歷整個對象,就像它是一個對象集合 - 這意味着在這種情況下王牌是一個對象,而不是一個對象(狀態)的屬性。要麼你只需要在狀態,或測試對象的集合進行迭代,你看一個屬性值之前的對象不是空:

if(typeof(sobj) != 'undefined'){ 
    if(mid == sobj.user_id) 
      //some stuff; 
} 
+0

我不認爲這種方法可行,因爲它會迭代'sate'對象的非對象屬性。 –

+0

Sergio - 這個例子可以工作,它意味着在foreach循環中執行,而不是作爲它的替代。 –