Ich habe ein Buch über Operatoren in Javascript gelesen, und das hat mich verwirrt.
%Vor% Dies würde "5" als eine Saite machen. Das Ergebnis wäre 51
.
Dieses Ergebnis wäre 4
. Ich weiß, dass es "5"
in 5
konvertiert, aber warum wird undefined
nicht als "eine Zeichenkette minus eine Zahl" angezeigt?
Update: Wie sieht es mit anderen Sprachen aus? Sind sie eingeschränkter?
Leider wurde von JavaScript erwartet, dass es den Erfolg von Java für die Werbung in den frühen Tagen mitbekommen hat und die plus für die Zeichenfolge -Kette wurde seit Java übernommen.
Also versucht JavaScript, Strings für Sie in Zahlen zu zwingen, es tut es wirklich, es ist nur so, dass das Plus für Strings genommen wurde, also ... nun ...
Obwohl Javascript viele Stärken hat, wurde es in 10 Tagen erstellt und hat viele urkomische Aspekte wie diese, schau dir diese Komödie Gold
Das + ist ein Operator, der SUMME bedeutet, wenn Zahlen addiert werden, und das bedeutet CONCATENATE bei der Verwendung von Strings.
Da das erste ein STRING ist, wird es fortfahren, eine "5" + zuString (1) zu verketten.
Da der Operator MINUS (-) nicht mit String arbeitet, werden Sie undefiniert.
Wenn Sie den MINUS-Operator verwenden möchten, müssen Sie Folgendes tun:
%Vor%Ich hoffe, es wird dir helfen
Wenn wir '+' verwenden, kann es auf zwei verschiedene Arten verwendet werden: -
1. als mathematischer Operator.
2. Verketten von Zeichenfolgen
aber '-' kann nur als mathematischer Operator verwendet werden.
Daher betrachtet javascript "5" als Numerik im Falle von "-", während "5" als Zeichenkette im Fall von "+" gilt.
In Javascript (+) operator operiert der Weg wie unten beschrieben
Gemäß dem Standard EcmaScript 262. Die Operatoren +
und -
verhalten sich bei Strings unterschiedlich. Die erste konvertiert jeden Wert in eine Zeichenfolge. Die zweite konvertiert jeden Wert in eine Zahl.
Vom Standard:
Wenn Typ (lprim) String oder Typ (rprim) ist String, dann Rückgabe der String, der das Ergebnis der Verkettung von ToString (lprim) gefolgt von ist ToString (rprim)
Diese Regel impliziert, dass, wenn in dem Ausdruck ein Zeichenfolgenwert vorhanden ist, alle an der Operation +
beteiligten Werte in eine Zeichenfolge konvertiert werden. In JavaScript, wenn der Operator +
mit Strings verwendet wird, verkettet er sie. Deshalb gibt console.log("5"+1)
"51" zurück. 1
wird in eine Zeichenkette umgewandelt und dann werden "5" + "1" miteinander verkettet.
Die obige Regel gilt jedoch nicht für den Operator -
. Wenn Sie -
verwenden, werden alle Werte gemäß dem Standard in Zahlen umgewandelt (siehe unten). Daher wird in diesem Fall "5"
in 5
konvertiert und dann wird 1
subtrahiert.
Vom Standard:
5 Lasse lum ToNumber (lval) sein.
6 Sei rnum ToNumber (rval).
Operator + : Ссылка
Betreiber - : Ссылка
Wegen der Typenzerrung und wie diese in JavaScript nicht sehr konsistent ist, wird im zweiten Fall "5"
in eine Zahl 5
konvertiert, und 1
wird davon subtrahiert, was 4
ergibt. .
Der Subtraktionsoperator (-) subtrahiert die Zahl rechts neben dem Operator von der Zahl links.
Wenn einer der Operanden Strings ist, wird versucht, die Strings in Zahlen umzuwandeln. Anstatt "5" zu verwenden, wenn Sie versuchen, console.log ("abc" - 1); Es wird ein Fehler als NaN angezeigt.
Nur für die Info: Der Subtraktionsoperator verfügt über spezielle Regeln, die sich mit der Vielfalt der in JavaScript vorhandenen Typkonvertierungen befassen:
Wenn die beiden Operanden Zahlen sind, führen Sie eine arithmetische Subtraktion durch und geben Sie das Ergebnis zurück.
Wenn eine Zahl NaN ist, ist das Ergebnis NaN.
Wenn Infinity von Unendlich abgezogen wird, ist das Ergebnis NaN.
Wenn -Infinity von -Infinity subtrahiert wird, ist das Ergebnis NaN.
Wenn -Unendlichkeit von Unendlichkeit subtrahiert wird, ist das Ergebnis Unendlichkeit.
Wenn Infinity von -Infinity subtrahiert wird, ist das Ergebnis -Infinity.
Wenn +0 von +0 subtrahiert wird, ist das Ergebnis +0.
Wenn -0 von +0 subtrahiert wird, ist das Ergebnis -0.
Wenn -0 von -0 subtrahiert wird, ist das Ergebnis +0.
Wenn einer der beiden Operanden keine Zahl ist, ist das Ergebnis NaN.
Tags und Links javascript add date-arithmetic