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
Vous devez vous connecter pour publier un commentaire.
Que d'autres renseignements pour la réponse donnée par @Pavel Gruba, et la polyfil que vous avez fournies. Au meilleur de ma connaissance, il n'y a pas de bonne façon de polyfil
hasOwnProperty
pour les navigateurs qui ne prennent pas en charge nativement. J'ai vu assez quelques-uns dans la nature et ils ont tous produire des faux positifs ou négatifs. Si je n'ai absolument pas d'alternative, alors c'est ce que j'ai créé pour mon utilisation, il souffre également de faux positifs et négatifs. Selon MSDN.Javascript
Sur jsfiddle
La hasOwnProperty méthode vérifie que la propriété est assignée à l'objet directement.
Donc, si la propriété 'a' est à l'état de prototype hasOwnProperty filtre.
Donc, hasOwnProperty est plus sûr, dans de nombreux cas.
hasOwnProperty ne pas vérifier les valeurs non définies vérifie uniquement si la propriété est asigned à l'objet, même si n'est pas défini