Si je déclare une variable booléenne JavaScript comme ceci :
var IsLoggedIn;
Et ensuite l'initialiser avec soit true
o 1
Est-ce sûr ? Ou est-ce que l'initialisation avec 1
faire de la variable un nombre ?
Si je déclare une variable booléenne JavaScript comme ceci :
var IsLoggedIn;
Et ensuite l'initialiser avec soit true
o 1
Est-ce sûr ? Ou est-ce que l'initialisation avec 1
faire de la variable un nombre ?
Les types dépendent de votre initialisation :
var IsLoggedIn1 = "true"; //string
var IsLoggedIn2 = 1; //integer
var IsLoggedIn3 = true; //bool
Mais regardez cet exemple :
var IsLoggedIn1 = "true"; //string
IsLoggedIn1 = true; //now your variable is a boolean
Le type de vos variables dépend de la valeur qui leur est attribuée en JavaScript.
Non, ce n'est pas sûr. Vous pourriez plus tard faire var IsLoggedIn = "Foo";
et JavaScript ne lancera pas d'erreur.
Il est possible de faire
var IsLoggedIn = new Boolean(false);
var IsLoggedIn = new Boolean(true);
Vous pouvez également passer la variable non booléenne dans la fonction new Boolean()
et cela fera de IsLoggedIn un booléen.
var IsLoggedIn = new Boolean(0); // false
var IsLoggedIn = new Boolean(NaN); // false
var IsLoggedIn = new Boolean("Foo"); // true
var IsLoggedIn = new Boolean(1); // true
Si vous voulez IsLoggedIn
pour être traité comme un booléen, vous devez l'initialiser comme suit :
var IsLoggedIn=true;
Si vous l'initialisez avec var IsLoggedIn=1;
alors il sera traité comme un nombre entier.
Cependant, à tout moment, la variable IsLoggedIn
pourrait faire référence à un autre type de données :
IsLoggedIn="Hello World";
Cela ne provoquera pas d'erreur.
Vous puede utiliser et tester les variables non initialisées, au moins pour leur "définition". Comme ceci :
var iAmNotDefined;
alert(!iAmNotDefined); //true
//or
alert(!!iAmNotDefined); //false
En outre, il existe de nombreuses possibilités : si vous n'êtes pas intéressé par les types exacts, utilisez l'opérateur '==' (ou ![variable] / ! ![variable]) pour la comparaison (c'est ce que Douglas Crockford appelle 'truthy' ou 'falsy', je crois). Dans ce cas, l'affectation de true ou 1 ou '1' à la variable unitialisée renvoie toujours true lorsqu'on le lui demande. Sinon [si vous avez besoin d'une comparaison sûre], utilisez '===' pour la comparaison.
var thisMayBeTrue;
thisMayBeTrue = 1;
alert(thisMayBeTrue == true); //=> true
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> false
thisMayBeTrue = '1';
alert(thisMayBeTrue == true); //=> true
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> false
// so, in this case, using == or !! '1' is implicitly
// converted to 1 and 1 is implicitly converted to true)
thisMayBeTrue = true;
alert(thisMayBeTrue == true); //=> true
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> true
thisMayBeTrue = 'true';
alert(thisMayBeTrue == true); //=> false
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> false
// so, here's no implicit conversion of the string 'true'
// it's also a demonstration of the fact that the
// ! or !! operator tests the 'definedness' of a variable.
PS : vous ne pouvez pas tester la "définition" pour des variables inexistantes. Donc :
alert(!!HelloWorld);
donne une erreur de référence ('HelloWorld n'est pas défini')
(existe-t-il un meilleur mot pour "définition" ? Pardonnez mon néerlandais en tout cas;~)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.