2016-09-20 2 views
0

オブジェクトの特定のプロパティがJavaScriptに存在するかどうかをチェックするための最も標準的で最良のブラウザ互換性はありますか?プロパティがJavaScript内のオブジェクトに存在するかどうかをチェックする(ブラウザの準拠)

私は、次を考えることができます:

1.

if(window && 'navigator' in window && 'userAgent' in window.navigator) {} 

2.

if(window && window.navigator && window.navigator.userAgent) {} 

答えて

2

チェックのそれぞれの開始時にwindow &&チェックが不要です。それが偽に評価される自然なケースは決してありません。 (Nodejsやグローバルワーカーが存在しない場合、その行は例外をスローし、falseと評価されません。window &&が改善する環境はありません。誤解を招く。)

#1は、windowwindowオブジェクトは、オブジェクトがtruthy値navigator性を有するかどうかをチェックし、任意の値を持つnavigator性、等#2を持っているかどうかをチェックします。あなたがwindow.navigatorまたはwindow.navigator.userAgentがプロパティとして存在することが予想されるが、(それらの特定のプロパティがブラウザで、これまで自然にされていない)falsenullundefined0NaN、または''に設定されていない限り、その後、#2は、うまく動作しますし、それはですきれいに短い。

0

どちらも完全に標準で完全にサポートされています。 2は、最も一般的に使用されているため、短く、(重要ではない)javascriptの開始以来サポートされていましたが、1はES3に付属しています。詳細は

参照MDN:小道具値は、これまで可能性があればそれでありながら優れたCAVETはしかし、 '0'は、falseを返します '0'以来 `in`を使用する必要があります
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

小道具の価値 – Justin

+0

はい、私はあまりにも虚偽の値を探しているときにこのようにコードを書かないように慣れていると思います。この警告は、オブジェクトに存在する偽の値をまだ拒否したい場合は、逆に '1'に適用されます。たとえば、{a:undefined} => trueの 'a 'です。まれに1つのサイズがjavascriptのすべてのソリューションに適合します。 – Damon

関連する問題