89 votes

Déclarer un booléen en JavaScript en utilisant simplement var

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 ?

161voto

Canavar Points 29161

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.

19voto

Ólafur Waage Points 40104

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

7voto

zpesk Points 3049

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.

5voto

KooiInc Points 38845

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;~)

2voto

Eugene Morozov Points 4417

Les variables en Javascript n'ont pas de type. Les variables non-zéro, non-nulle, non-vide et true sont "vrais". Zéro, null, undefined, empty string et false sont "fausses".

Il existe cependant un type booléen, ainsi que des littéraux. true y false .

Prograide.com

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.

Powered by:

X