IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Liens ou références entre les variables


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 672
    Par défaut Liens ou références entre les variables
    cela fait plusieurs années que je fais des bricolages avec javascript mais j'ai remarqué que je n'ai toujours pas compris comment sont liées les variables entre elle quand on utilise des références.

    par exemple si on part de ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let tableau = [["A"], ["B"]];
    tableau[0] = tableau[1];
    tableau[1][0] = "C";
    ici la 2e ligne assigne à tableau[0] la référence à tableau[1] et donc les 2 cases pointent vers le même objet.
    et donc après la 3e ligne, on a dans tableau [["C"], ["C"]].

    mais si on change la 3e ligne pour faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let tableau = [["A"], ["B"]];
    tableau[0] = tableau[1];
    tableau[1] = ["C"];
    je m'attendais à ce que la 3e ligne stocke dans tableau[1] la référence à l'objet ["C"] et donc je m'attendais à retrouver le même résultat [["C"], ["C"]] puisque les cases 0 et 1 sont liées.
    mais le résultat est [["B"], ["C"]] et donc je n'ai pas compris à quel moment je n'ai pas compris ce qu'il se passe (incompréhenception...).

    je viens de lire plusieurs pages de ce type mais cela ne m'aide pas :
    https://developer.mozilla.org/fr/doc...mmar_and_types

  2. #2
    Membre émérite
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 340
    Par défaut
    Bonjour mathieu,
    Citation Envoyé par mathieu Voir le message
    j'ai remarqué que je n'ai toujours pas compris
    Oh oui, c'est très fréquent : des trucs qu'on manipule souvent jusqu'au jour où on réalise qu'on n'avait pas assimilé un détail sans que cela nous ait entravés dans nos développements.

    Citation Envoyé par mathieu Voir le message
    puisque les cases 0 et 1 sont liées.
    Elles ne sont pas liées : elles sont toujours comme deux variables différentes. Elles contiennent simplement chacune une référence vers le même tableau. Il est bien question d'un seul tableau, mais deux 2 références comme 2 flèches qui pointent vers le même objet.
    Quand on fait tableau[1]=["C"], on casse la flèche de la case 1 vers le tableau sur lequel elle pointait et on crée une nouvelle flèche vers un nouveau tableau. Je le vois comme ça.

    Ecrire tableau[0] = tableau[1]; ne crée donc pas un lien entre les deux cases/variables.
    C'est pareil que d'écrire a=1, b=a, derrière on est libre de modifier a sans que ça affecte b.

  3. #3
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 495
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 495
    Par défaut
    salut, cette video m'a permis d'y voir plus clair (c'est en anglais)

    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 672
    Par défaut
    merci, grâce à vous j'ai maintenant l'information qu'il me manquait : il y a une différence de traitement entre les types primitifs dont la valeur est stockée dans la variable et les autres types (qui ont l'air d'être basés sur des objets) dont la variable contient uniquement une référence.

    je comprend mieux pourquoi il n'y a pas d'erreur quand on modifie un tableau définit par const.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 26
    Dernier message: 19/08/2013, 18h08
  2. [shell] références dans les variables
    Par tiresias54 dans le forum Administration système
    Réponses: 3
    Dernier message: 23/12/2011, 17h51
  3. [RegEx] Éliminer les liens sans texte entre les balises
    Par kabkab dans le forum Langage
    Réponses: 2
    Dernier message: 12/04/2009, 11h27
  4. Problème de dépendance entre les variables
    Par Lotendan dans le forum Général Python
    Réponses: 6
    Dernier message: 26/08/2008, 10h49
  5. Réponses: 7
    Dernier message: 20/08/2007, 13h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo