2016-06-30 5 views
1

Ich habe so etwas wie die folgenden:javascript: erwartete wahr oder falsch, aber immer Anzahl

var val = "string"; 
var testVal = val && val.length; 

Ich würde erwarten, testVal entweder true oder false sein, aber es ist die Länge der Saite. Nicht sicher, warum das ist?

+0

Zuerst habe ich zu downvote werden, aber dann merkte ich Ihnen eine Reihe statt wahr, falsch und nicht umgekehrt wurden zu bekommen. – Goose

+0

@Juhana Gibt es ein besseres generisches Duplikat, da dieses spezifisch für logische Operatoren ist, die Objekte zurückgeben und bei einer zukünftigen Suche nach jemandem mit diesem Problem nicht erscheinen würden. – Goose

+0

@Goose Sie können einen aus den verknüpften Fragen dieser Frage suchen. Die Person, die die Frage gestellt hat, wählte eine nicht so gute Antwort, aber die [Antwort mit den meisten Stimmen] (http://stackoverflow.com/a/8569966/502381) erklärt das Problem im allgemeinen Fall. – JJJ

Antwort

1

Der logische Operator && führt keinen Typcast durch. Der Ausdruck, den er bildet, wird nur für den linken Operanden ausgewertet, wenn dieser Operand falsch ist, andernfalls für den rechten Operanden.

Sie müssen explizit boolean konvertieren:

var testVal = !!(val && val.length); 
Verwandte Themen