Convertir la vérité ou la fausseté en booléen explicite

98

J'ai une variable. Appelons ça toto.

Cela totopeut être réglé sur undefined, null, une chaîne ou un objet.

Je voudrais vérifier si totoest défini sur une donnée, ce qui signifie défini sur une chaîne ou un objet, et ni undefinedni null, et définir la valeur booléenne correspondante dans une autre variable.

J'ai pensé à la syntaxe !!, qui ressemblerait à ceci:

var tata = !!toto; // tata would be set to true or false, whatever toto is.

Le premier !serait réglé sur falsesi toto vaut undefinedou nullet truesinon, et le second l'inverserait.

Mais cela semble un peu étrange. Alors, y a-t-il un moyen plus clair de le faire?

J'ai déjà regardé cette question , mais je veux définir une valeur dans une variable, pas seulement la vérifier dans une ifdéclaration.

Aracthor
la source
10
Cette question est marquée comme un doublon mais si vous regardez l'autre question stackoverflow.com/questions/263965/ ... c'est assez différent; ils ne sont pas du tout des doublons
Sam
@Sam Désolé, mais je me suis confirmé ce double, je ne connaissais pas cette autre question, mais cela a résolu mon problème.
Aracthor
11
@Aracthor Ce n'est PAS un doublon, car stackoverflow.com/questions/263965/… consiste à convertir une chaîne contenant uniquement les mots "true" et "false" en leurs équivalents booléens. Cette question concerne la conversion de N'IMPORTE QUELLE variable en un booléen selon qu'elle est véridique ou fausse.
Alan McBee - MSFT

Réponses:

154

Oui, vous pouvez toujours utiliser ceci:

var tata = Boolean(toto);

Et voici quelques tests:

for (var value of [0, 1, -1, "0", "1", "cat", true, false, undefined, null]) {
    console.log(`Boolean(${typeof value} ${value}) is ${Boolean(value)}`);
}

Résultats:

Boolean(number 0) is false
Boolean(number 1) is true
Boolean(number -1) is true
Boolean(string 0) is true
Boolean(string 1) is true
Boolean(string cat) is true
Boolean(boolean true) is true
Boolean(boolean false) is false
Boolean(undefined undefined) is false
Boolean(object null) is false
Robo Robok
la source
75
Il est à noter que Boolean ("false") est true, alors que vous souhaitez probablement qu'il soit false.
Sterling Bourne
45
Pourquoi diable voudriez-vous que la chaîne "false" soit fausse? Même php ne fait pas ça: D
Danon
1
Il veut dire Boolean("false").
Robo Robok
2
@NoahDavid Il renvoie vrai. La seule chaîne convertie en falseest une chaîne vide ( "").
Robo Robok
6
Exactement. C'est pourquoi vous devez être prudent lorsque vous utilisez la phrase "false" si elle est entre guillemets et donc interprétée comme une chaîne. Vous pensez peut-être que vous le qualifiez de faux, mais en fait, il retournera vrai - d'où l'avertissement d'origine.
Sterling Bourne
0

Vous pouvez utiliser Boolean(obj)ou !!objpour convertir truthy/falsyen true/false.

var obj = {a: 1}
var to_bool_way1 = Boolean(obj) // true
var to_bool_way2 = !!obj // true
yaya
la source