Object#hasOwnProperty
プロトタイプオブジェクトを辿らずにそのオブジェクトがプロパティを持っているか調べれます。これはオブジェクトのメソッドですが、対象のオブジェクトがhasOwnProperty
を持っている可能性などが可能性は低いですがある為メソッドでの呼び出しは良くありません。以下のようにcall
から呼び出すとほぼ確実にメソッドのhasOwnProperty
が呼び出せてより安全です。
Object.prototype.hasOwnProperty.call({foo: 'foo'}, 'foo');
// true
({foo: 'foo', hasOwnProperty: () => false}).hasOwnProperty('foo');
// false
in
プロパティ名 in オブジェクト
でも調べることができます。こちらはプロトタイプを遡り調べることができます。
'hasOwnProperty' in Object
// true
もちろん、ただのプロパティの有無も調べられますよ。
'foo' in {foo: 'foo'}
// true