Les instructions de tests
Les instructions de tests
1 Les tests et branchements
Les instructions de test Les mots clés in
,true
,false
,null
,undefined
,typeof
et instanceof
sont destiné à être utilisé dans des expressions afin de permettre la comparaison d'opérande avec les constantes qu'il définissent ou les valeurs qu'ils renvoient.
in
permet de tester si une propriété ou un indice existe dans un objet javascript.
Sa syntaxe est : propriété in
objet
Exemple :
var monObjet = ['test', 'de' , 'mote clé','in'];
monObjet ; // renvoi (4) ["test", "de", "mote clé", "in"]
"test" in monObjet ; // renvoi false
monObjet.test; // renvoi undefined
"length" in monObjet ; // renvoi true
monObjet.length ; //renvoi 4
Attention à ne pas confondre les propriétés avec les valeurs d'un tableau ou d'une propriété. ̀in` teste l'existence de propriétés dans les objets, pas leur valeurs (length existe et vaut 4 pas "length")
Les mots clés true
, false
, undefined
et null
permettent la comparaison avec les notions qu'ils défininssent.
true
et false
sont respectivement les bolléens vrai et faux. ils peuvent aussi être utilisé pour l'affectation de ces valeurs à une variable ou une propriétée.
Exemple :
var variable = true
var variable2 = false
variable1 == ! variable2 ; // renvoi true
variable1 === true ; // renvoi true
variable1 == 1; // renvoi true
variable1 == 0; // renvoi false
variable1 === 1; // renvoi false
variable2 == 0 ; // renvoi true
variable2 === 0 ; //renvoi false
Les six dernières lignes méritent une explication :true
et false
peuvent aussi être exprimé par différents de zéro et égal à zéro, donc l'opérateur ==
renvoie vrai dans les cas correspondant. Mais une valeur numérique n'est pas un bolléen donc l'opérateur ===
renvoie faux quelque soit la valeur numérique !
Maintenant que l'on sait créer des expressions booléennes on peut passer en revu les instructions de test preproment dite.
Il existe deux façons de faire des branchements conditionnels selon que l'on veut exprimer un alternative, ou un choix multiple.
L'alternative, c'est à dire une expression de la forme " si .... alors ... sinon ..." est codé avec les instructions if
et else
. Le format est le suivant :
if(expr)
instruction
else
instruction
;
où expr est une expression et instruction est soit une seul instruction (terminée par un point virgule) soit une suite d'instructions entre accolades ( c'est à dire un bloc d'instruction). Si expre vaut true
ou n'importe quelle valeur differente de zéro alors alors c'est l'instruction placée entre le if
et le else
qui est exécutées, sinon c'est celle placée aprés le else
.
Voici un exemple qui affiche 'vrai' si la condition vaut true
(ou non nulle) et faux sinon
if(mavar)
alert('vrai');
else
alert('faux')
;
A noter que pour une simple affectation il y a une écriture abrégé de la forme :
resultat = condition ? siVrai : SiFaux;
C'est équivalent à :
if(condition)
resultat = siVrai;
else
resultat = siFaux;
Pour les choix multiple, plutôt que d'empiler les if else if else
... une instruction à été prévue. Il s'agit de l'instruction switch . Sa syntaxe est la suivante :
switch(expression) {
case résultat1:
liste instruction 1;
break;
case résultat2:
liste instruction 2;
break;
default:
liste instruction 3;
break;
}
Le principe est le suivant, l'expression de l'instruction switch est calculée puis son résultat est comparé à la valeur de chaque instruction case. Si l'un d'eux correspond alors la liste d'instructions placé en dessous du case est exécuté jusqu'à l'instruction break
. Si aucune valeur contennue dans un instruction case ne correspond et qu'il y a une instruction default alors la liste d'instructions placé après est exécutée.
Cette instruction a des particularité à connaître.
Voici un exemple qui affiche des messages en forme de compte à rebours en partant la valeur contenu dans maval (3 maximum):
switch(maval) {
case 3:
alert('3');
case 2:
alert('2');
case 1:
alert('1');
default:
alert('0');
}
Vous noterez qu'en l'absence de break
, les instructions case suivant celle qui contient la valeur de maval sont "ignorés" .
Autre exemple, quand plusieurs résultats ont le même traitement, par exemple :
switch(maval) {
case 1:
case 3:
case 5:
alert(maval+' est impair');
break;
case 2:
case 4:
case 6:
alert(maval+' est pair');
break;
default:
alert('merci d\'indiquer un chiffre entre un et six inclus');
break;
}