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