Debuggage JavaScript

Fermé
Snake - 24 nov. 2003 à 19:21
 Snake - 24 nov. 2003 à 21:12
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

Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 208
24 nov. 2003 à 20:04
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
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
24 nov. 2003 à 20:17
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
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