Мне кажется, что существует четыре разных способа определить, имеет ли данный объект (например, foo) заданное свойство (например, bar):
-
if (foo.hasOwnProperty(bar)) { -
if ('bar' in foo) { -
if (typeof foo.bar !== 'undefined') { -
if (foo.bar === undefined) {
Чтобы определить, есть ли в объекте foo свойство с именем "bar", все три эти выражения эквивалентны? Есть ли какая-либо субъектная семантика, которую я не знаю, что делает любое из этих трех утверждений разными?