Avantage de l'utilisation de Object.hasOwnProperty vs test si la propriété n'est pas définie

Depuis hasOwnProperty a quelques mises en garde et caprices (fenêtre /utilisation intensive dans ie8 questions /etc).

Je me demandais si il n'y a aucune raison d'utiliseret si tout simplement tester si une propriété n'est pas définie est mieux justifiées & plus simpliste.

Par exemple:

var obj = { a : 'here' };

if (obj.hasOwnProperty('a')) { /* do something */ }

if (obj.a !== undefined) { /* do something */ }
//or maybe (typeof (obj.a) !== 'undefined')

Demandais juste si quelqu'un a des bon aperçu sur ce, je préfère être à l'aide de la plupart des navigateurs, et jusqu'à la date de la méthodologie.

J'ai aussi vu ce prototype sur-écrire pour hasOwnProperty, qui fonctionne, mais je ne suis pas vendu sur son utilité...

if (!Object.prototype.hasOwnProperty) {
    Object.prototype.hasOwnProperty = function(prop) {
        var proto = this.__proto__ || this.constructor.prototype;
        return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]);
    };
}

source d'informationauteur Mark Pieszak - DevHelp.Online | 2013-06-17