Maison >interface Web >js tutoriel >Comment puis-je éviter les erreurs « Impossible de lire la propriété non définie » en JavaScript ?

Comment puis-je éviter les erreurs « Impossible de lire la propriété non définie » en JavaScript ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-23 01:26:09995parcourir

How Can I Avoid

Éviter les erreurs « Impossible de lire les propriétés non définies »

Lorsque vous travaillez avec des structures de données complexes, il est courant de rencontrer des erreurs liées à des propriétés non définies. Prenons l'exemple suivant :

// This array contains a mix of nested objects and non-nested values
var test = [{'a':{'b':{'c':"foo"}}}, {'a': "bar"}];

L'itération sur le test peut entraîner des erreurs lors de l'accès aux propriétés d'objets imbriqués qui peuvent ne pas exister. Par exemple, le code suivant génère une erreur lors de l'accès à a.b.c :

for (i=0; i<test.length; i++) {
    console.log(a.b.c); // Throws error on i==1
}

Pour éviter de telles erreurs, plusieurs approches peuvent être utilisées :

Chaînage facultatif (ES2020) et TypeScript 3.7

Mise à jour : Pour les navigateurs modernes et TypeScript, la solution recommandée est l'opérateur de chaînage facultatif (?.) :

obj?.a?.lot?.of?.properties

Solution de contournement basée sur les fonctions (pré-ES2020 et pré-TypeScript 3.7)

A une solution de contournement simple consiste à utiliser une fonction d'assistance :

function getSafe(fn, defaultVal) {
  try {
    return fn();
  } catch (e) {
    return defaultVal;
  }
}

// Use the function to access the property safely
console.log(getSafe(() => obj.a.lot.of.properties));

Cette fonction renvoie le résultat de l'appel de la fonction fournie, ou un valeur par défaut si une erreur se produit. En utilisant cette approche, vous pouvez éviter les erreurs et accéder sous condition aux propriétés imbriquées :

console.log(getSafe(() => obj.a.lot.of.properties, 'nothing'));

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn