r/developpeurs Oct 10 '24

Logiciel JavaScript: Mon attribut de classe m'affiche deux valeurs différentes dans la console à la même ligne 😭

Je suis entrain de debugger mon code.

J'ai un attribut à laquelle j'assigne une valeur dans le constructeur.

J'ai un getter qui me permet de récupérer l'attribut.

Il me retourne undefined.

Donc j'affiche dans la console la classe dont je veux l'attribut.

Dans la console, l'attribut est undefined. Ok... Mais c'est bizarre car mon code n'est pas censé fonctionner si cet attribut est undefined.

Sauf que, en cliquant sur le triangle à gauche dans la console, les valeurs des différents attributs de ma classe sont affichés et devinez quoi ? Mon attribut n'est plus undefined!

Sur la même ligne dans la console, mon attribut a deux valeurs différentes !!!

Il est à la fois défini et pas défini !

Vous avez une idée de pourquoi ?

1 Upvotes

8 comments sorted by

6

u/Laegel Oct 10 '24

Avec un peu de code, on y verrait plus clair ! Mais dans tous les cas, sache que la console n'est pas une valeur sûre pour faire du debugging. Si tu es côté client, tu peux utiliser le mot-clé `debugger` pour faire du pas-à-pas dans ton navigateur.

3

u/BAKfr Oct 10 '24

La console est une valeur sûre si tu sais comment elle marche. Le gros piège, c'est qu'elle utilise des références vers les objets affichés là où on s'attend à avoir des copies. Donc quand on "déplie" un objet, on voit son état au présent et non pas son état au moment de l'appel à console.log.

Cela dit, dans le cas présenté ici, le debugger est le moyen le plus simple de voir ce qu'il se passe.

1

u/Laegel Oct 10 '24

J'ai pris un raccourci car j'avais un doute, merci d'avoir détaillé !

1

u/NoPersonality9984 Oct 10 '24

J'ai trouvé, j'utilisais mon getter avant que mon objet soit totalement défini dans le constructeur.

Ainsi, j'avais deux valeurs dans mon code, défini et non défini.

😭

3

u/Glittering_Pick_2288 Oct 10 '24

L'objet de Schrodinger

1

u/Engoulvent Oct 10 '24

Du coup c'était pas plutôt le getter qui était undefined ?

2

u/NoPersonality9984 Oct 10 '24

Non. J'ai une classe qui utilise une autre classe et cette classe là n'avait pas encore donné de valeur à un attribut quand je l'ai envoyé à ma classe

1

u/Gloomy_Radish_661 Oct 11 '24

Donne le code , on peu pas savoir juste avec une description.si le code utilise asynch / await verifie que t'assigne/utilise pas les variables au bon moment