所以有關於S.O的問題。它回答如何檢查對象上的屬性是否存在。 Example答案是使用Object.prototype.hasOwnProperty()
。如何檢查可能未定義的對象上是否存在屬性?
但是,如何檢查可能未定義的對象的屬性?
如果有人試圖直接檢查某個屬性是否存在於一個未定義的對象上,那麼這將是一個引用錯誤。
從語義上看,直接檢查代碼似乎更好if (obj.prop) //dosomething
- 它顯示更清晰的意圖。有什麼辦法可以做到這一點?最好有沒有一個內置的JavaScript方法來做這樣的事情或慣例?
動機:一個包添加屬性user.session.email - 但我檢查是否存在電子郵件,而不是會話,雖然會話可能不存在。
更新:許多答案都說要使用運營商短路的& &。我意識到這是一個可能的解決方案,但它不完全是我們所期望的,因爲它看起來像我們在JS對象語法的周圍工作 - 也就是說,儘管您想真正檢查對象上的屬性,你被迫檢查對象是否存在才能這樣做。
注意標記爲關閉爲什麼標記爲關閉?假設這是重複的鏈接可能不會產生相同的答案。我們正在尋找一個更好,更多的語義解決方案,並將此標記爲「嵌套」===「可能未定義」?
這不會是一個語法錯誤,它會是一個ReferenceError。你可以檢查'obj && obj.prop'。 – Xufox
'obj'變量肯定會存在,但可能只有'undefined'值?順便說一句,測試'if(obj.prop)'不測試一個屬性是否存在,它測試一個屬性是否存在*和*具有真值。 – nnnnnn
啊 - 修正了問題的描述,但問題仍然有效,因爲你本質上是檢查對象和屬性是否存在,當我只是試圖真正檢查屬性是否存在。 – steviejay