Considérer:
if (someVar.hasOwnProperty('someProperty') ) {
// Do something();
} else {
// Do somethingElse();
}
Quelle est la bonne utilisation / explication de hasOwnProperty('someProperty')
?
Pourquoi ne pouvons-nous pas simplement utiliser someVar.someProperty
pour vérifier si un objet someVar
contient une propriété avec un nom someProperty
?
Qu'est-ce qu'une propriété dans ce cas?
Quelle propriété ce JavaScript vérifie-t-il?
Réponses:
hasOwnProperty
renvoie une valeur booléenne indiquant si l'objet sur lequel vous l'appelez possède une propriété avec le nom de l'argument. Par exemple:var x = { y: 10 }; console.log(x.hasOwnProperty("y")); //true console.log(x.hasOwnProperty("z")); //false
Cependant, il ne regarde pas la chaîne prototype de l'objet.
Il est utile de l'utiliser lorsque vous énumérez les propriétés d'un objet avec la
for...in
construction.Si vous voulez voir tous les détails, la spécification ES5 est, comme toujours, un bon endroit pour regarder.
la source
window
eval
code plutôt que de code global ou de fonction). Je l'ai essayé dans une page HTML vierge et j'obtiens une erreur "impossible de convertir null en objet".Voici une réponse courte et précise:
En JavaScript, chaque objet possède un ensemble de paires clé-valeur intégrées contenant des méta-informations sur l'objet. Lorsque vous parcourez toutes les paires clé-valeur en utilisant la
for...in
construction / boucle pour un objet, vous parcourez également ces paires clé-valeur de méta-informations (ce que vous ne voulez certainement pas).En utilisant des
hasOwnPropery(property)
filtres, ces boucles inutiles dans les méta-informations et vérifient directement que le paramètreproperty
est une propriété donnée par l'utilisateur dans l'objet ou non. Par filtrage , je veux dire, celahasOwnProperty(property)
ne regarde pas si,property
existe dans la chaîne de prototypes d'Object, autrement dit les méta-informations.Il renvoie un booléen
true/false
basé sur cela.Voici un exemple:
var fruitObject = {"name": "Apple", "shape": "round", "taste": "sweet"}; console.log(fruitObject.hasOwnProperty("name")); //true console.log(Object.prototype.hasOwnProperty("toString");) //true because in above snapshot you can see, that there is a function toString in meta-information
J'espère que c'est clair!
la source
console.log(Object.prototype....
; vouliez-vous direconsole.log(fruitObject.
? fruitObject ou Object?for (var key in fruitObject) { ... }
js uniquement des clés non prototypes de toute façon, est-ce que je manque quelque chose ou est-ce que le runtime JS a changé la façon dont ils traitent les objets à saisir boucles?Il vérifie:
Renvoie une valeur booléenne indiquant si un objet a une propriété avec le nom spécifié
Le hasOwnProperty méthode renvoie true si l'objet a une propriété du nom spécifié, false dans le cas contraire. Cette méthode ne vérifie pas si la propriété existe dans la chaîne de prototypes de l'objet; la propriété doit être membre de l'objet lui-même.
Exemple:
var s = new String("Sample"); document.write(s.hasOwnProperty("split")); //false document.write(String.prototype.hasOwnProperty("split")); //true
la source
Sommaire:
hasOwnProperty()
est une fonction qui peut être appelée sur n'importe quel objet et prend une chaîne comme entrée. Il renvoie un booléen qui esttrue
si la propriété est située sur l'objet, sinon il retourne false.hasOwnProperty()
est situé surObject.prototype
et donc disponible pour tout objet.Exemple:
function Person(name) { this.name = name; } Person.prototype.age = 25; const willem = new Person('willem'); console.log(willem.name); // Property found on object console.log(willem.age); // Property found on prototype console.log(willem.hasOwnProperty('name')); // 'name' is on the object itself console.log(willem.hasOwnProperty('age')); // 'age' is not on the object itself
Dans cet exemple, un nouvel objet Personne est créé. Chaque personne a son propre nom qui est initialisé dans le constructeur. Cependant, l'âge ne se situe pas sur l'objet mais sur le prototype de l'objet. Par conséquent
hasOwnProperty()
revienttrue
pour le nom etfalse
pour l'âge.Applications pratiques:
hasOwnProperty()
peut être très utile lors d'une boucle sur un objet à l'aide d'unefor in
boucle. Vous pouvez vérifier avec lui si les propriétés proviennent de l'objet lui-même et non du prototype. Par exemple:function Person(name, city) { this.name = name; this.city = city; } Person.prototype.age = 25; const willem = new Person('Willem', 'Groningen'); for (let trait in willem) { console.log(trait, willem[trait]); // This loops through all properties, including the prototype } console.log('\n'); for (let trait in willem) { if (willem.hasOwnProperty(trait)) { // This loops only through 'own' properties of the object console.log(trait, willem[trait]); } }
la source
Vous utilisez object.hasOwnProperty ( p ) pour déterminer si un objet a une propriété énumérable p -
Un objet peut avoir son propre prototype, où des méthodes et des attributs «par défaut» sont attribués à chaque instance de l'objet. hasOwnProperty renvoie true uniquement pour les propriétés spécifiquement définies dans le constructeur ou ajoutées ultérieurement à l'instance.
Pour déterminer si p est défini du tout, n'importe où, pour l'objet, utilisez if ( p instanceof object), où p s'évalue en une chaîne de nom de propriété.
Par exemple, par défaut, tous les objets ont une méthode 'toString', mais elle n'apparaîtra pas dans hasOwnProperty.
la source
hasOwnProperty est une fonction JavaScript normale qui prend un argument de chaîne.
Dans votre cas,
somevar.hasOwnProperty('someProperty')
il vérifie que lasomevar
fonction asomepropery
ou non - il renvoie vrai et faux.Dire
function somevar() { this.someProperty = "Generic"; } function welcomeMessage() { var somevar1 = new somevar(); if(somevar1.hasOwnProperty("name")) { alert(somevar1.hasOwnProperty("name")); // It will return true } }
la source
hasOwnProperty
est une bonne façon de vérifier qu'un objet a une propriété ou non.someVar.someProperty
ne peut pas être utilisé comme alternative à cette situation. La condition suivante montrera une bonne différence:const someVar = { isFirst: false }; // The condition is true, because 'someVar' has property 'isFirst' if (someVar.hasOwnProperty('isFirst')) { // Code runs } // The condition is false, because 'isFirst' is false. if (someVar.isFirst) { // Code does not runs here }
Par conséquent,
someVar.isFirst
ne peut pas être utilisé comme alternative àsomeVar.hasOwnProperty('isFirst')
.la source
Scène A:
const objA = { a: 1, b: 2 } for (const key in objA) { if (objA.hasOwnProperty(key)) { console.log(objA[key]) } } Output 1 2
Scène B:
const objB = { a: 1, b: 2, hasOwnProperty() { return false } } for (const key in objB) { if (objB.hasOwnProperty(key)) { console.log(objB[key]) } } Outputs nothing
Parce que JavaScript ne protège pas la propriété de hasOwnProperty. Vous pouvez donc l'utiliser comme ceci:
for (const key in objB) { if (Object.prototype.hasOwnProperty.call(obj, key)) { console.log(objB[key]) } }
la source
Il vérifie si un objet a une propriété . Cela fonctionne de la même manière que
if(obj.prop)
, pour autant que je sache.la source
obj.prop
suit la chaîne de prototypes,hasOwnProperty
ne le fait pasprop
a une valeur fausse.if(obj.hasOwnProperty('prop'))
seratrue
pendant queif(obj.prop)
serafalse
.