2

ブラウザの機能とオブジェクト プロパティの検出に演算子を使用することを提案する記事を読みました。in与えられた例は使用することです:

if("geolocation" in navigator) {
    // Do some stuff
}

それよりも:

if(navigator.geolocation) {
    // Do some stuff
}

ただし、次のコードが問題なく動作するように見えるという事実にもかかわらず、hasOwnProperty については言及されていません。

if(navigator.hasOwnProperty('geolocation')) {
    // Do some stuff
}

inの代わりに、hasOwnPropertyまたはその逆を使用する必要がある状況はありますか? それとも単にスタイル上の選択ですか?

4

1 に答える 1

4

hasOwnPropertyの MDN とは違いがあります。

Object から派生したすべてのオブジェクトは、hasOwnPropertyメソッドを継承します。このメソッドを使用して、オブジェクトが指定されたプロパティをそのオブジェクトの直接プロパティとして持っているかどうかを判断できます。演算子とは異なりin 、このメソッドはオブジェクトのプロトタイプ チェーンをチェックしません。

私のアドバイスは、オブジェクトを作成した場合は、inほとんどの場合または単純なルックアップを使用できますが、プロトタイプチェーンが配置されている場合はオプションを検討することです。それがネイティブ オブジェクトまたは制御できないその他のオブジェクトである場合は、 を使用しますhasOwnProperty

于 2013-08-03T22:46:34.667 に答える