Vérifier si une propriété existe dans un objet

Il est facile de juger s'il y a un objet dans l'objet, et l'une des méthodes d'écriture sera utilisée ci-dessous.

// 判断对象是否存在某一个属性,正确写法
const hasProperty = (obj,key) => key in obj;

Quelles sont les fautes de frappe courantes ?

La première:

// 这只是判断了obj是否存在key这个属性,
const hasProperty = (obj,key) => obj.key !==undefined

// 而我们需要判断的应该是它的值,所以应该这样写
const hasProperty = (obj,key) => obj[key] !==undefined

Est-ce que c'est bien d'écrire comme ça ? Pouvez-vous utiliser undefined pour déterminer si une propriété d'objet existe ? Entrez ce morceau de code dans le contrôle du navigateur, appuyez sur Entrée pour exécuter. Vérifions que la première façon d'écrire est correcte :

const hasProperty=(obj,key) => obj[key] !==undefined;
var obj={k:undefined};
hasProperty(obj,'k');

Lorsque la valeur de la propriété de l'objet n'est pas définie, elle renvoie false et elle devrait être vraie (k est stocké dans obj), donc undefined ne peut pas être utilisé pour déterminer si une certaine propriété existe dans l'objet.

Le deuxième type :

// 通过Object.keys(obj)得到属性形成的属性数组['key'],再用includes()判断['key']是否有参数key的值
const hasProperty = (obj,key) => Object.keys(obj).includes(key);

Est-ce possible? vérifier:

const hasProperty = (obj,key) => Object.keys(obj).includes(key);
var obj={k:undefined, o:2};
hasProperty(obj,'o');// ['k','o'],'o'

// true

 Cela semble pouvoir juger. Et si l'objet entrant ressemble à ceci ?

const hasProperty = (obj,key) => Object.keys(obj).includes(key);
var obj={k:undefined, o:2};

// 给obj对象加一个属性p和其值为1
Object.defineProperty(obj,'p',{
    enumerable: false, // 不可遍历
    value: 1, // p 的值
})

console.log(obj.p); // 1 

hasProperty(obj,'p'); // false

D'après la figure ci-dessous, nous constatons que obj existe déjà p et p a également une valeur, mais elle ne peut pas être jugée par hasProperty(), donc la deuxième méthode ne fonctionne pas.

 Le troisième type :

La troisième est hasOwnProperty(), une méthode fournie par l'objet pour déterminer si l'objet possède une propriété. Cette fonction vérifie uniquement si l'objet lui-même possède cette propriété. Object.prototype.hasOwnProperty.call(obj, key) est identique à hasOwnProperty(), car obj peut obtenir la méthode Object à partir de la chaîne de prototypes.

const hasProperty = (obj,key) =>obj.hasOwnProperty(key);
var obj={k:undefined, o:2};

// 给obj对象加一个属性p和其值为1
Object.defineProperty(obj,'p',{
    enumerable: false, // 不可遍历
    value: 1, // p 的值
})

console.log(obj.p); // 1 

hasProperty(obj,'p'); // true

Exécutez la console, hasOwnProperty() juge qu'il n'y a pas de problème avec l'objet lui-même et la vérification révèle que le jugement de hasProprty() est incohérent avec le résultat attendu. Mais nous savons que obj a une méthode toString(), alors d'où vient toString() ? toString() vient de la chaîne de prototypes. Si l'objet obj lui-même n'existe pas, obj sera trouvé à partir de la chaîne de prototypes.

console.log(obj.toString) // ƒ toString() { [native code] }

hasProperty(obj,'toString'); // false

Chaîne prototype, vous pouvez vous référer à cette photo :

Alors, comment juger si un objet possède une certaine propriété et peut trouver toString() à partir de la chaîne de prototypes ? Vous pouvez utiliser dans :

const hasProperty = (obj,key) => key in obj;


var obj={k:undefined, o:2};

// 给obj对象加一个属性p和其值为1
Object.defineProperty(obj,'p',{
    enumerable: false, // 不可遍历
    value: 1, // p 的值
})

console.log(obj.p); // 1 

hasProperty(obj,'p'); // true


hasProperty(obj,'toString'); // true

5.17 EhO : / Déterminez si un certain attribut existe dans un certain objet, vérifiez les scénarios d'erreur courants, avez-vous été trompé ? #Questions d'entretien Web Front End# javascript# es6# Programmeur https://v.douyin.com/S5pWyCL/ Copiez ce lien, ouvrez la recherche Douyin et regardez la vidéo directement ! https://v.douyin.com/S5pWyCL/

Je suppose que tu aimes

Origine blog.csdn.net/qq_58062502/article/details/129410561
conseillé
Classement