Konvertieren Sie Wahrheit oder Falschheit in einen expliziten Booleschen Wert

94

Ich habe eine Variable. Nennen wir es toto.

Dies totokann eingestellt werden undefined, nulleine Zeichenfolge oder ein Objekt.

Ich möchte überprüfen, ob totoauf Daten gesetzt ist, dh auf eine Zeichenfolge oder ein Objekt gesetzt ist, und weder undefinednoch null, und den entsprechenden booleschen Wert in einer anderen Variablen setzen.

Ich dachte an die Syntax !!, die so aussehen würde:

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

Das erste !würde auf gesetzt werden, falsewenn toto ist undefinedoder nullund truesonst, und das zweite würde es invertieren.

Aber es sieht ein bisschen seltsam aus. Gibt es einen klareren Weg, dies zu tun?

Ich habe mir diese Frage bereits angesehen , möchte aber einen Wert in einer Variablen festlegen und nicht nur in einer ifAnweisung überprüfen .

Aracthor
quelle
10
Diese Frage ist als Duplikat markiert, aber wenn Sie sich die andere Frage stackoverflow.com/questions/263965/… ansehen , ist sie ganz anders. Sie sind überhaupt keine Duplikate
Sam
@ Sam Entschuldigung, aber ich habe mir dieses Duplikat bestätigt, ich wusste nichts über diese andere Frage, aber es hat mein Problem gelöst.
Aracthor
11
@Aracthor Es handelt sich NICHT um ein Duplikat, da es bei stackoverflow.com/questions/263965/… darum geht, Zeichenfolgen, die nur die Wörter "true" und "false" enthalten, in ihre booleschen Gegenstücke zu konvertieren. Bei dieser Frage geht es darum, JEDE Variable in einen Booleschen Wert umzuwandeln, je nachdem, ob sie wahr oder falsch ist.
Alan McBee - MSFT

Antworten:

151

Ja, Sie können dies immer verwenden:

var tata = Boolean(toto);

Und hier sind einige Tests:

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

Ergebnisse:

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
quelle
74
Bemerkenswerterweise ist Boolean ("false") wahr, wenn Sie wahrscheinlich möchten, dass es falsch ist.
Sterling Bourne
44
Warum um alles in der Welt möchten Sie, dass die Zeichenfolge "falsch" falsch ist? Sogar PHP macht das nicht: D
Danon
1
Er meint Boolean("false").
Robo Robok
2
@NoahDavid Es wird true zurückgegeben. Die einzige Zeichenfolge, in die umgewandelt falsewird , ist eine leere Zeichenfolge ( "").
Robo Robok
6
Genau. Aus diesem Grund müssen Sie vorsichtig sein, wenn Sie den Ausdruck "false" verwenden, wenn er in Anführungszeichen steht und daher als Zeichenfolge interpretiert wird. Sie mögen denken, Sie würden es auf falsch setzen, aber tatsächlich wird es wahr zurückgeben - daher die ursprüngliche Warnung.
Sterling Bourne
0

Sie können Boolean(obj)oder !!objzum Konvertieren truthy/falsyin verwenden true/false.

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