2016-09-20 95 views

回答

2

在各檢查的開始時的window &&檢查是不必要。從來沒有一個自然的情況下,將評估爲假。 (如果你在Nodejs中或在網絡工作者中運行的代碼不存在window global,那麼該行會拋出一個異常,而不是評估爲false。沒有環境可以改善事物,並且存在這樣的環境誤導。)

#1將檢查window對象是否具有navigator屬性與任何值等#2將檢查window對象是否具有navigator屬性與truthy值。除非你希望window.navigatorwindow.navigator.userAgent是存在的屬性,但被設置爲falsenullundefined0NaN,或''(其中那些特定的屬性不是以往任何時候都自然地在瀏覽器中),然後#2將工作得很好,它的很好,更短。

0

兩者都完全標準化並且完全支持。與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

+0

一個好的CAVET不過,如果道具價值可能永遠不會'0'應該使用'in'因爲'0'將返回false,儘管這是道具的價值。 – Justin

+0

是的,我想我很習慣不用這種方式編寫代碼時專門尋找一個虛假的價值。如果您仍想拒絕發生在對象上的錯誤值,則相反地,該警告適用於'1'。例如,{a:undefined} => true中的'a'。 JavaScript中很少有適合所有解決方案的解決方案。 – Damon

相關問題