web-dev-qa-db-ja.com

javascript:オブジェクトに特定の要素またはプロパティがあるかどうかを確認する最良の方法は?

私がこれを持っているとしましょう:

_var person = { "name": "John Doe", "email": "[email protected]" };
_

このオブジェクトには、nameemailという2つの要素しかありません。要素ageを持っている人もいますが、この特定の人は持っていません。これを確認する最良の方法は何ですか?

  • if (person.age) { ... }
  • if (person.age != undefined) { ... }
  • if (person.age !== undefined) { ... }
  • if (typeof(person.age) != 'undefined') { ... }
  • if (person.hasOwnProperty('age')) { ... }

私はこれらすべてが同じことをしないことを知っています、例えば。 if (person.age)は、agedoesが存在するが、falseまたはnullまたは_''_または_0_。そして、いくつかは単に間違っているだけではないのだろうか。

personはここでは既存のオブジェクトであることがわかっていますが、_person.age_は存在する場合と存在しない場合があることに注意してください。

5
RocketNuts

オブジェクトに特定の要素またはプロパティがあるかどうかを確認するこれらの方法の信頼性を確認しましょう。

Boolean(person.age)falseの場合、これは失敗する可能性があります

if (person.age) { ... }

person.agenullまたはundefinedの場合、これは失敗する可能性があります

if (person.age != undefined) { ... }

person.ageundefinedの場合、これらは失敗する可能性があります

if (person.age !== undefined) { ... }
if (typeof(person.age) != 'undefined') { ... }

一方、hasOwnProperty()メソッドは、オブジェクトが独自の(継承されていない)プロパティとして指定されたプロパティを持っているかどうかを示すbooleanを返します。したがって、person.ageプロパティの値には依存しません。だからここでの最良の方法です

if (person.hasOwnProperty('age')) { ... }

さらに進んで、オブジェクトに反復可能なプロパティ(独自のプロパティと継承されたプロパティを含むすべてのプロパティ)があるかどうかを確認する場合は、for..inループを使用すると目的の結果が得られます。

6
Rohit Agrawal