Il y a plusieurs réponses ici pour vérifier si une propriété existe dans un objet.
J'utilisais toujours
if(myObj.hasOwnProperty('propName'))
mais je me demande s'il y a une différence
if('propName' in myObj){
Ils sont presque égaux, la différence est que hasOwnProperty
ne vérifie pas la chaîne du prototype, tandis que in
le fait.
Un exemple
var test = function() {}
test.prototype.newProp = function() {}
var instance = new test();
instance.hasOwnProperty('newProp'); // false
'newProp' in instance // true
Comme indiqué, Object.hasOwnProperty
renvoie uniquement "propres propriétés", c'est-à-dire les propriétés qui sont ajoutées directement, et non les propriétés ajoutées au prototype
.
Oui, il y a une différence. hasOwnProperty()
ignore les propriétés et méthodes qui sont ajoutées avec prototype
. J'essaie d'expliquer avec des exemples. Par exemple, si vous avez un prototype d'objet
Object.prototype.something = function() {};
Et disons que vous suivez object
var obj = {
"a" : "one",
"b" : "two"
};
Et boucle:
for ( var i in obj ) {
//if (obj.hasOwnProperty(i)) {
console.log(obj[i]);
//}
}
Sans hasOwnProperty
, il affichera one two function()
, tandis qu'avec hasOwnProperty()
méthode seulement one two