私がこれを持っているとしましょう:
_var person = { "name": "John Doe", "email": "[email protected]" };
_
このオブジェクトには、name
とemail
という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)
は、age
doesが存在するが、false
またはnull
または_''
_または_0
_。そして、いくつかは単に間違っているだけではないのだろうか。
person
はここでは既存のオブジェクトであることがわかっていますが、_person.age
_は存在する場合と存在しない場合があることに注意してください。
オブジェクトに特定の要素またはプロパティがあるかどうかを確認するこれらの方法の信頼性を確認しましょう。
Boolean(person.age)
がfalse
の場合、これは失敗する可能性があります
if (person.age) { ... }
person.age
がnull
またはundefined
の場合、これは失敗する可能性があります
if (person.age != undefined) { ... }
person.age
がundefined
の場合、これらは失敗する可能性があります
if (person.age !== undefined) { ... }
if (typeof(person.age) != 'undefined') { ... }
一方、hasOwnProperty()メソッドは、オブジェクトが独自の(継承されていない)プロパティとして指定されたプロパティを持っているかどうかを示すboolean
を返します。したがって、person.age
プロパティの値には依存しません。だからここでの最良の方法です
if (person.hasOwnProperty('age')) { ... }
さらに進んで、オブジェクトに反復可能なプロパティ(独自のプロパティと継承されたプロパティを含むすべてのプロパティ)があるかどうかを確認する場合は、for..in
ループを使用すると目的の結果が得られます。