用於檢查JavaScript中是否存在對象的給定屬性的最標準和最佳瀏覽器兼容性是什麼?檢查JavaScript中的對象是否存在屬性(瀏覽器符合性)
我可以認爲以下的:
1.
if(window && 'navigator' in window && 'userAgent' in window.navigator) {}
2.
if(window && window.navigator && window.navigator.userAgent) {}
用於檢查JavaScript中是否存在對象的給定屬性的最標準和最佳瀏覽器兼容性是什麼?檢查JavaScript中的對象是否存在屬性(瀏覽器符合性)
我可以認爲以下的:
1.
if(window && 'navigator' in window && 'userAgent' in window.navigator) {}
2.
if(window && window.navigator && window.navigator.userAgent) {}
在各檢查的開始時的window &&
檢查是不必要。從來沒有一個自然的情況下,將評估爲假。 (如果你在Nodejs中或在網絡工作者中運行的代碼不存在window
global,那麼該行會拋出一個異常,而不是評估爲false。沒有環境可以改善事物,並且存在這樣的環境誤導。)
#1將檢查window
對象是否具有navigator
屬性與任何值等#2將檢查window
對象是否具有navigator
屬性與truthy值。除非你希望window.navigator
或window.navigator.userAgent
是存在的屬性,但被設置爲false
,null
,undefined
,0
,NaN
,或''
(其中那些特定的屬性不是以往任何時候都自然地在瀏覽器中),然後#2將工作得很好,它的很好,更短。
兩者都完全標準化並且完全支持。與2
一起去,因爲它是最常用的,更短,並且(不是那麼重要)自javascript創建以來得到支持,而1
出現在ES3中。
見MDN瞭解更多詳情:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors
一個好的CAVET不過,如果道具價值可能永遠不會'0'應該使用'in'因爲'0'將返回false,儘管這是道具的價值。 – Justin
是的,我想我很習慣不用這種方式編寫代碼時專門尋找一個虛假的價值。如果您仍想拒絕發生在對象上的錯誤值,則相反地,該警告適用於'1'。例如,{a:undefined} => true中的'a'。 JavaScript中很少有適合所有解決方案的解決方案。 – Damon