2013-12-12 15 views
12
console.log(true+true); //2 
console.log(typeof(true+true)); //number 
console.log(isNaN(true+true)); //false 

Warum werden zwei boolesche Typen addiert, die eine Zahl ergeben? Ich verstehe, dass es, wenn sie nicht gleich wären (1/0 (binär?)) Schwierig wäre zu versuchen, Arithmetik auf einem booleschen Typ auszuführen, aber ich kann die Logik hinter dieser Logik nicht finden.JavaScript Boolesche Werte hinzufügen

+2

Weil sie in Zahlen umgewandelt werden 'Nummer (wahr) + Nummer (richtig) === 2' –

+0

Weil' wahr' 1 ist, wenn es automatisch in eine Zahl konvertiert wird. Das dynamische System von Javascript in Aktion. –

+0

'true' wandelt zu' 1' um – elclanrs

Antwort

9

tun können Es funktioniert so, weil das ist, wie es angegeben zu arbeiten.

Der EcmaScript-Standard gibt an, dass der Operator +, sofern keines der Argumente eine Zeichenfolge ist, eine numerische Addition und keine Zeichenkettenverkettung bedeutet. Die Konvertierung in numerische Werte wird explizit erwähnt:

Geben Sie das Ergebnis der Additionsoperation zu ToNumber (lprim) und ToNumber (rprim) zurück.

(wo lprim und rprim die primitiven Formen der linken und der rechten Argument sind, respectively)

EcmaScript legt auch die To Number Konvertierung für booleans klar:

Die Ergebnis ist 1, wenn das Argument wahr ist. Das Ergebnis ist +0, wenn das Argument falsch ist.

Daher true + true bedeutet effektiv 1 + 1 oder 2.

0

Javascript ist eine dynamisch typisierte Sprache, weil Sie nicht angeben müssen, welcher Typ etwas ist, wenn Sie beginnen, wie bool x oder int i. Wenn eine Operation angezeigt wird, die nicht wirklich ausgeführt werden kann, werden die Operanden in die entsprechenden Werte konvertiert, damit sie für sie ausgeführt werden können. Dies wird als Typzwang bezeichnet. Sie können Boolesche Werte nicht hinzufügen, daher wird Javascript die Booleschen Werte in etwas umwandeln, das sie hinzufügen kann, etwa in Form einer Zeichenkette oder einer Zahl. In diesem Fall ist es sinnvoll, sie auf eine Zahl zu setzen, da 1 häufig verwendet wird, um wahr und 0 für falsch darzustellen. So wird Javascript die true 's zu 1 s, und fügen Sie sie zusammen

Verwandte Themen