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 :

changement ou pas valeur tableau


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 112
    Par défaut changement ou pas valeur tableau
    Bonsoir je ne réussis pas a comprendre pourquoi ce code affiche (6,7,8,9,10) et pas (1,2,3,4,5) pouvez vous m'expliquer ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function modif(tablo){
    tablo=new array(1,2,3,4,5); 
    }
     
    var tablo=new array(6,7,8,9,10);
    modif(tablo)
    for(var i =0 ; i<tablo.lenght, i++) { document.write(tablo+";");
    j'ai d'abord un tableau avec 6, 7, 8, 9, 10
    j'appelle la fonction modif
    donc on crée un nouveau tableau qui écrase le précédent car on lui donne le même nom tablo non ?

    merci

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Ce n'est pas à cause des noms de variable qui sont le même . c'est la fonction modif qui modifie le tableau passé en paramètre.

    A+.

  3. #3
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    1) array n'existe pas en javascript;
    2) lenght n'existe pas en javascript;
    3) un crochet ouvrant doit être suivi, au bout d'un moment, d'un crochet fermant (en javascript);
    4) en javascript, la demande d'incrémentation, dans une boucle for, est précédée d'un point-vigule;
    5) document.write est une fonction magique, donc irrationnelle, et par ailleurs décrépitée depuis le dernier millénaire;

    ton expérience n'est pas absurde mais en appelant modif sans argument, tu constateras que le résultat est celui que tu cherches;

  4. #4
    Membre confirmé
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 112
    Par défaut
    bonsoir,
    je modifiais le code pour qu'il n'y ait plus d'erreurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <html>
    	<head> 
    		<script language="javascript">
    			function modif(tablo){
    			tablo = new Array(1,2,3,4,5); 
    			}
    		</script>
    	</head>
    	<body>
    	<script language="javascript">
    		var tablo = new Array(6,7,8,9,10);
    		modif(tablo);
    		for(var i =0 ; i<tablo.length; i++) { 
    		document.write(tablo[i] +";");
    		}
    	</script>
    	</body>
    </html>
    je sais que ce n'est pas un code très pro mais il me sert à essayer de vous expliquer ce que je ne comprends pas.
    j'ai fait expres que mettre comme parametre tablo (ce n'est pas une erreur)

    ce code donc affiche 6;7;8;9;10;

    je ne comprends pas pourquoi il n'affiche pas 1;2;3;4;5;

    pour moi le tableau tablo contenant 1,2,3,4,5,6 est crée
    puis l'appel de la fonction l'écrase et créé un nouveau tableau nommé tablo où l'on a 6,....10

    visiblement je me plante totalement dans mon raisonnement

    j'aimerais comprendre ligne par ligne "comment le code est interprété"

    merci

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Bonjour,
    dans la fonction ton tableau est passé par "valeur" et non par "adresse"
    A la sortie la copie passé à la fonction est modifié pas l'original.

    Cela revient à écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function modif( param){
       param = new Array(1,2,3,4,5);
    }
    ce qui est d'ailleurs préférable, il est déconseillé d'utiliser les mêmes noms de variable.

    Pour modifier l'original, il te faut retourné l'élément modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function modif( param){
       param = new Array(1,2,3,4,5);
      return param;
    }
    dans ce cas il te faudra faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var tablo = new Array(6,7,8,9,10);
    var i, sTmp = '';
    tablo = modif(tablo); // demande la modification
     
    for( i =0 ; i<tablo.length; i++) { 
      sTmp += tablo[i] +";";
    }
    alert( sTmp);
    enfin ce que tu imaginais devrait s'écrire comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var tablo = new Array(6,7,8,9,10);
    var i, sTmp = '';
     
    function modif(){
       tablo = new Array(1,2,3,4,5);  // ici variable globale
    }
    modif(); // demande la modification
     
    for( i =0 ; i<tablo.length; i++) { 
      sTmp += tablo[i] +";";
    }
    alert( sTmp);
    on en profite pour rappeler que
    <script language="javascript"> est obsolète et qu'il convient d'écrire <script type="text/javascript"> ou encore <script> en HTML5

  6. #6
    Membre confirmé
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 112
    Par défaut
    j'avoue que c vraiment difficile pour moi de comprendre ... désolé si je parait "dur à la détente"

    si je comprends bien , le paramètre d'une fonction est toujours passé par valeur même si c'est un tableau et donc on travaille uniquement avec une copie.

    j'ai cru comprendre dans mon cours qu'un tableau était tjs passé par référence donc qu'on travaillé directement sur lui

    ai je compris ou je suis encore complètement à l'ouest ?

    merci

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    cela se passe lors des affectations, notes la différence sur cet exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // sur tableaux
    var tab_1 = [1,2,3,4,5];
    var tab_2 = tab_1;   // tab_2 'pointe sur tab_1
    tab_2[2] = 'trois';  // modification de tab_1 indirectement
    alert( tab_1);
    // sur string
    var s_1 = 'un texte';
    var s_2 = s_1;       // s_2 reoit la valeur de s_1
    s_2 += 'plus long';  // modification de s_2 et uniquement s_2
    alert( s_1);

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    j'ai omis de mentionner que
    Citation Envoyé par mathier Voir le message
    j'ai cru comprendre dans mon cours qu'un tableau était tjs passé par référence donc qu'on travaillé directement sur lui
    je dirais oui et non.

    Cela va dépendre de la façon dont on va se servir du tableau passé en paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    var tablo = [6,7,8,9,10];
    // affectation globale
    function modif_0(param){
       param = [1,2,3,4,5];
    }
    // modification de données individuelles
    function modif_1(param){
      var tab = [1,2,3,4,5];
      for( var i=0; i < param.length; i++){
        param[i] = tab[i];
      }
    }
    // pas de modification
    modif_0(tablo);
    alert( tablo);
    // modification
    modif_1(tablo);
    alert( tablo);

Discussions similaires

  1. Tableau avec changement spontané des valeurs
    Par Hobbèse dans le forum Débuter
    Réponses: 4
    Dernier message: 01/02/2014, 12h37
  2. Réponses: 7
    Dernier message: 27/04/2009, 10h33
  3. Detecter le changement d'une valeur sur un tableau
    Par Viscapon dans le forum Struts 1
    Réponses: 3
    Dernier message: 30/11/2008, 17h00
  4. Réponses: 2
    Dernier message: 27/02/2008, 13h32
  5. changement de la valeur d'une variable
    Par nemya dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 27/09/2005, 09h50

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