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
Libérer: 2024-12-23 01:26:09
original
1072 Les gens l'ont consulté

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"}];
Copier après la connexion

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
}
Copier après la connexion

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
Copier après la connexion

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));
Copier après la connexion

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'));
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal