Как правильно проверить наличие свойства в объекте JavaScript?

У меня есть пользовательский объект Javascript, который я создаю сnewи назначить свойства на основе аргументов создания:

function MyObject(argument) {
    if (argument) {
        this.prop = "foo";
    }
}
var objWithProp = new MyObject(true); // objWithProp.prop exists
var objWithoutProp = new MyObject(false); // objWithoutProp.prop does not exist

Какой правильный способ проверить существованиеprop свойство объектов? Я видел следующие способы, но я не уверен, что любой из этих способов является лучшим:

if (obj.prop) {}if (obj.hasOwnProperty("prop")) {}if ("prop" in obj) {}

В частности, меня интересует только тестирование, если свойство явно определено для этого объекта, а не в цепочке прототипов. Кроме того, значение никогда не будет установлено наnull или жеundefined, но это может быть что-то вроде пустого объекта или массива. Однако, если вы хотите указать, каков правильный путь, если это так, не стесняйтесь.

Ответы на вопрос(3)

Ваш ответ на вопрос