Partage
  • Partager sur Facebook
  • Partager sur Twitter

Compréhension du type const avec les objets

Sujet résolu
    4 octobre 2021 à 0:02:58

    Bonjour tout le monde,

    dans ma quête d'apprendre la programmation et Javascript, je suis actuellement le cours d'openclassroom.

    Cependant je suis tombé plusieurs fois sur le type const, et je pensais en avoir compris le principe (un type de variable qui ne permet que sa lecture), jusqu'à que je tombe sur les cas suivants :

    const tableau = [];

    tableau = [1]; // Ici cela retourne une erreur je comprend jusque là

    tableau.push(2); // cela ajoute bel et bien 2 au tableau

    En voyant cela, je me suis donc dis que la commande de la ligne 3 ne touche pas au "tableau" mais les références du tableau (càd ce qu'il y a entre "[]"). Sauf que, comment peut-on changer les références de "tableau" avec un .push alors que la commande de la ligne 2 ne fonctionne pas elle ? 

    Cela voudrait donc dire qu'en initialisant un tableau, on initialise 2 variables (ou 2 slot de mémoire) : "tableau" et "[]" ? Avec "tableau" qui se réfère à "[]" . Cela expliquerait pourquoi la ligne 2 n'est pas correcte car elle tente de modifier la constante "tableau" qui pointe vers "[]" alors que la ligne 3 est correcte car elle change simplement le contenu de [] (qui elle-même se réfère à des valeurs car nous somme dans un tableau.

     Désolé, je sens que j'ai loupé quelque chose dans mon apprentissage qui m'a complétement envoyé dans un raisonnement complétement faux, mais il fallait que j'essaye de vous l'expliquer quitte à passer pour un fou car ça me frustre vraiment de ne pas comprendre comment fonctionne les attributions de valeure derrière nos lignes de code, en JavaScript.

    J'ai essayé d'être le plus clair possible, en espérant finir par comprendre, merci de votre lecture ;) 

    EDIT : J'essaye de revenir sur ma vision de comprendre la chose, finalement je pense simplement que la ligne : "tableau = [1]" est simplement fausse et pas possible du faite que "tableau" est un type const et que ma commande tente de la réinitialiser et non pas modifier ses références dans [].

    Alors que : "tableau.push()" touche directement aux références et, ne tente pas cette fois de tout réinitialiser.

    Je sais pas si cette version et bonne, mais je serais curieux de comprendre comment fonctionne javascript côté variable et tout, si quelqu'un connait une ressources dessus, je la prend avec plaisir ! 

    Merci ! :)

    -
    Edité par NecDown 4 octobre 2021 à 0:10:50

    • Partager sur Facebook
    • Partager sur Twitter
      4 octobre 2021 à 3:23:20

      la référence doit toujours rester la même(référence vers le tableau que tu as créé), en revanche le contenu du tableau (ou d'un objet) peut lui changer

      const tableau = [];

      Un Array est créé et la variable tableau référencera toujours cet Array. Ici le mot const signifie que la variable "tableau" ne pourra jamais référencer un autre Array que celui que tu viens de créer. L'array en lui même reste modifiable.

      Lorsque tu écris :

      tableau = [1]; 

      Javascript comprend que tu souhaite créer un nouvel Array, et l'assigner à tableau. Problème : Dans la ligne d'avant tu avais indiqué à javascript que tableau ne pourrait pas désigner un autre Array, à fortiori un nouvel Array. Donc conformément à ta volonté, c'est interdit

      tableau.push(2)

      Ici, tu indique à javascript que tu souhaite modifier l'Array. Aucun problème, comme dit plus haut, le mot const ici n'a pas pour sémantique d'empêcher la modification de l'array.

      Le raisonnement évoqué concerne de la même manière les objets. Si tu te demande pourquoi on peut modifier l'objet/array alors qu'on a mis le mot const, il faut comprendre que du point de vue de Javascript, la variable contient une référence vers l'array ou l'objet. C'est cette référence qui doit rester constante. Quand tu modifies l'objet ou l'array, il garde la même adresse. Mais lorsque tu créer un nouvel objet ou un nouvel array, qui existe à une adresse différente, et que tu essayes de l'assigner à la variable, alors dans ce cas c'est impossible car cela nécessiterait de modifier la référence.




      -
      Edité par AntoineWeber3 4 octobre 2021 à 3:44:03

      • Partager sur Facebook
      • Partager sur Twitter
        4 octobre 2021 à 10:33:46

        Ah parfait, c'est super clair maintenant. Merci beaucoup :).

        Bonne journée !

        • Partager sur Facebook
        • Partager sur Twitter

        Compréhension du type const avec les objets

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown