Debuggage JavaScript

Salut,

J'ai un problème en JavaScript que je n'arrive pas à résoudre. Voici mon code, très simple...

<script language="JavaScript1.3">

// Variables globales ---------------------
var alpha = new Array(2);
var prog = new Array(15,4);
//-----------------------------------------


// Affectation des valeurs ----------------
alpha[0] = " ";
alpha[1] = "I";
prog[0][0] = "q0"; prog[0][1] = "I"; prog[0][2] = " "; prog[0][3] = "q1";
prog[1][0] = "q1"; prog[1][1] = " "; prog[1][2] = ">"; prog[1][3] = "q2";
// la ligne qui pose problème est visiblement la suivante
prog[2][0] = "q2"; prog[2][1] = "I"; prog[2][2] = ">"; prog[2][3] = "q2";
prog[3][0] = "q2"; prog[3][1] = " "; prog[3][2] = ">"; prog[3][3] = "q3";
prog[4][0] = "q3"; prog[4][1] = "I"; prog[4][2] = ">"; prog[4][3] = "q3";
prog[5][0] = "q3"; prog[5][1] = " "; prog[5][2] = "I"; prog[5][3] = "q4";
prog[6][0] = "q4"; prog[6][1] = "I"; prog[6][2] = ">"; prog[6][3] = "q5";
prog[7][0] = "q5"; prog[7][1] = " "; prog[7][2] = "I"; prog[7][3] = "q6";
prog[8][0] = "q6"; prog[8][1] = "I"; prog[8][2] = "<"; prog[8][3] = "q6";
prog[9][0] = "q6"; prog[9][1] = " "; prog[9][2] = "<"; prog[9][3] = "q7";
prog[10][0] = "q7"; prog[10][1] = " "; prog[10][2] = ">"; prog[10][3] = "q9";
prog[11][0] = "q7"; prog[11][1] = "I"; prog[11][2] = "<"; prog[11][3] = "q8";
prog[12][0] = "q8"; prog[12][1] = "I"; prog[12][2] = "<"; prog[12][3] = "q8";
prog[13][0] = "q8"; prog[13][1] = " "; prog[13][2] = ">"; prog[13][3] = "q0";
prog[14][0] = "q9"; prog[14][1] = " "; prog[14][2] = ">"; prog[14][3] = "q10";
//-----------------------------------------

</script>


Là j'ai une erreur qui me dit "'prog.2' a la valeur NULL ou n'est pas un objet". Et là je bloque. Si quelqu'un a une idée pour résoudre le souci...

Merci d'avance,
A+

3 réponses

  1. En JS, l'instruction :
    var prog = new Array(15,4) ;

    crée un tableau unidimensionnel à 2 éléments contenant les valeurs 15 et 4.
    Dans ton cas, il convient de faire, par exemple :
    1ère solution :
    var prog = new Array() ;
       for ( i  0 ; i < 15 ; i++ ) {
          prog[i] = new Array() ; // ou new Array(4) ;
       }

    puis coder les affectations.
    2ème solution :
    var prog = new Array() ;
           prog[0]  = new Array("q0","I"," ","q1") ;
           prog[1] = new Array("q1"," ",">","q2") ;
           ..........
           prog[14]  new Array("q9"," ",">","q10") ;
    1
    1. Bsr Snnnnnnnnnnnnaaaaaaaaaaaaake,

      tssss, tssss ben vi c'est normal !

      Lorsque tu déclares var prog = new Array(15,4); tu ne déclares pas un tableau à 2 dimensions 15x4 mais un tableau avec 2 éléments : 15 et 4
      C'est comme si tu écrivais :
      var prog = new Array(2);
      prog[0]=15;
      prog[1]=2;

      En fait si tu indiques autre chose qu'un simple chiffre JS affecte directement les valeurs dans un tableau monodimensionnel.

      Donc forcement dès que tu utilises un index supérieur à 1 ça plante !

      Ze solution :

      var prog = new Array(15);
      for (i=0; i< prog.length; i++) prog[i]=new Array(4);

      En prime une petite fonction super utile que j'ai trouvé dans la doc JavaScript Netscape pour voir le contenu d'un objet (je l'utilise tout le temps) :

      function show_props(obj, objName)
      {
      var result = ""
      for (var i in obj)
      {
      result += objName + "." + i + " = " + obj[i] + "\n"
      }
      return result
      }

      Essai
      alert(show_props(prog,"prog"));

      après tes initialisations tu verras c'est magique pour le débogage !

      Heu évite qd même des choses comme :

      alert(show_props(document,"document")); ;-)

      @+

      PhP    [Push the button,Don't push the
      .         button,Trip the station,Change the channel]
      0
      1. Hello,

        Super merci, ça marche nickel. Le temps de bouffer et j'ai ma réponse... vive le net ! : )

        En fait il me semblait que le new Array(15)(4) ne créait un tableau à 2 éléments qu'en JavaScript1.2, mais pas en 1.1 ni en 1.3.

        Je ne sais pas où j'ai vu ça mais ça devait être une connerie.

        Bon en tout cas merci.
        A+
        0