JavaScript Hinzufügen Boolean
console.log(true+true); //2
console.log(typeof(true+true)); //number
console.log(isNaN(true+true)); //false
Warum ist die addition von 2 booleschen Typen, woraus sich eine Zahl? Ich verstehe, dass, wenn Sie nicht gleich (1/0 (Binär?)) es wäre ungeschickt, zu versuchen, führen Sie arithmetische Operationen mit einem boolean-Typ, aber ich kann nicht finden, die Argumentation hinter dieser Logik.
- Denn Sie bekommen Umgerechnet in zahlen
Number(true) + Number(true) === 2
- Da
true
1, wenn automatisch in eine Zahl konvertiert. Javascript ist die dynamische Typisierung in Aktion. true
wirft, um1
- Ich würde davon ausgehen, das + operand wird automatisch festgelegten Werte werden als 'verbundene', was in wahren Wesen behandelt wie eine numerische?
- Ja, ich verstehe, dass, aber warum?
+
tut das casting gibt.- Kann man da nicht hinzufügen, booleans, also es wandelt Sie in zahlen ersten.
- So würde das bei einem anderen Betreiber?
- Weil Javascript so gemacht. Versuchen, zu konvertieren Typen, so dass es passt. Es war eine design-Entscheidung, die der Schöpfer später bereut, aber es war bedeutet, um eine einfache scripting Sprache, die auf den ersten... also baute er in einigen "automation" für die Grundtypen.
- Sicher...
true/true === 1
- Verwandte: stackoverflow.com/questions/20555155/why-is-the-answer-42
- Jeder Betreiber, dass konvertieren Ihre Operanden um die Anzahl Arten wird dies tun.
- ^^ Recht hat, versuchen
true-true
odertrue*true
sind, werden Sie behandelt, als diejenigen. Sie können auch casten zu einem string, sprich:true+''+true == "truetrue"
- "JavaScript-Zwang Entmystifiziert" - webreflection.blogspot.de/2010/10/...
- Das ist sehr gute Informationen. Danke Jungs
- LOL wahr + wahr = 2... noch nie in meinem Leben!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Funktioniert so, weil das ist, wie es angegeben ist, zu arbeiten.
EcmaScript standard gibt an, dass, wenn entweder der Argumente ist ein string, der
+
Betreiber wird angenommen, dass meine numerische Zusatz und nicht als string-Verkettung. Konvertierung zu numerischen Werten ist ausdrücklich erwähnt:(wo
lprim
undrprim
sind die primitiven Formen der linken und der rechten-hand-argument, beziehungsweise)EcmaScript gibt auch die
To Number
Konvertierung für booleans klar:Daher
true + true
effektiv bedeutet1 + 1
oder2
.Javascript ist Locker typisiert, und es werden automatisch konvertiert Dinge in andere Dinge, die auf die situation passen. Das ist, warum Sie tun können
var x
ohne es zu definieren, wie eineint
oderbool
http://msdn.microsoft.com/en-us/library/6974wx4d(v=vs. 94).aspx
Javascript ist eine dynamisch typisierte Sprache, weil Sie nicht haben, um festzulegen, welche Art etwas ist, wenn Sie beginnen, wie
bool x
oderint i
. Wenn er sieht, dass eine operation kann nicht wirklich geschehen, es wird konvertieren des Operanden, was Sie brauchen, damit Sie können haben Sie, dass der Betrieb auf Sie gemacht. Dies ist bekannt als Typ Zwang. Sie können nicht hinzufügen, booleans, also Javascript gewirkt wird, die Boolesche Werte, um etwas, dass Sie hinzufügen können, so etwas wie einen string oder eine Zahl. In diesem Fall macht es Sinn zu wirken, um eine Zahl, da 1 wird Häufig verwendet, um darzustellen, true und 0 für false. Also Javascript wird Stimmen dietrue
's zu1
s, und fügen Sie Sie zusammen