J'ai donc passé à travers la plupart des questions ici. Aussi quelques articles bons et mauvais. Une chose que je voudrais obtenir des précisions supplémentaires est de savoir comment les variables non définies et non déclarées sont traitées.Un autre Javascript Undefined Null Question
Prenez le code ci-dessous.
var a;
if(a == null) // True - Due to Type Coercion
if(a == 'null') // False
if(a === null) // False
if(a === 'null') // False
if(a == undefined) // True
if(a === undefined) // True
if(a == 'undefined') // False
if(a === 'undefined') // False
if(a) // False - A is undefined
alert(typeof(a)) // undefined
Tout ce qui précède je comprends. Mais les choses deviennent bizarres quand vous regardez une variable non déclarée. Note J'omets spécifiquement un "var b;". Toute autre opération que typeof (b) entraîne une erreur d'exécution. Pourtant, je peux comprendre la logique derrière la façon dont le langage évalue les expressions. Alors maintenant, je regarde une propriété inexistante d'un et suis vraiment confus. Je pense que c dans ce cas serait traité comme b dans l'exemple précédent mais ce n'est pas le cas. Vous devez réellement initialiser un à quelque chose, alors vous pouvez l'amener à se comporter comme b. Et l'empêcher de lancer des erreurs d'exécution.
Pourquoi est-ce le cas? Existe-t-il un traitement spécial du type indéfini ou la fonction typeof fait-elle quelque chose de manière récursive pour évaluer la propriété sub qui génère l'erreur d'exécution?
Je suppose que la question pratique est ici si je vérifie un objet imbriqué c dans a.c je peux immédiatement supposer c est indéfini si un est indéfini?
Et quel est le meilleur moyen alors si je voulais vérifier un objet extrêmement imbriqué pour voir si elle était définie comme x dans MyObject.Something.Something.Something.x? Je dois naviguer à travers la structure élément par élément en s'assurant que chacun existe avant de passer au suivant dans la chaîne?
** NOTE * *: dans votre exemple ci-dessus, * a * serait * non défini * et non * null *. – jldupont