web-dev-qa-db-fra.com

Javascript: Vérifiez si l'objet a des propriétés

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){
27
sebilasse

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

[~ # ~] violon [~ # ~]

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.

45
adeneo

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

Voir les différences entre First et Second DEMOS

4
tnanoba