Über "5" -1 & "5" +1 in Javascript (Plus- und Minuszeichen) [Duplizieren]

8

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 .

%Vor%

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?

    
chenghuayang 27.05.2015, 07:23
quelle

8 Antworten

5

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

    
JSelser 27.05.2015, 07:28
quelle
2

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

    
quelle
1

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.

    
KlwntSingh 27.05.2015 07:29
quelle
1

In Javascript (+) operator operiert der Weg wie unten beschrieben

  • 3 + true wird 4 zurückgeben, (+) operator zwischen einer Zahl und einem booleschen Wert oder zwei boolesche Werte werden boolean in Zahl umwandeln, daher wird true in 1 umgewandelt und das Ergebnis ist 4
  • "2" + true gibt "2true" zurück, wenn einer der Operanden eine Zeichenkette ist, konvertiert er den anderen Operanden (Zahl oder boolesch) in Zeichenkette und verarbeitet die Verkettung
  • - "12" +3 gibt den Wert -9 zurück, der Operator (-) vor der Zeichenkette wandelt die Zeichenkette in eine Zahl um und macht sie zu -12 und gibt -9
  • zurück
Shushanth Pallegar 27.05.2015 07:50
quelle
1

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).

Operatordefinition aus dem Standard EcmaScript 262.

Operator + : Ссылка

Betreiber - : Ссылка

    
Giuseppe Pes 27.05.2015 07:38
quelle
0

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. .

    
Evan Knowles 27.05.2015 07:26
quelle
0

"5" könnte zu 5 (Integer) gezwungen werden. Deshalb erhalten Sie 4 als Ausgabe. Allerdings, wenn Sie versuchen:

%Vor%

Text kann nicht erzwungen werden, und die Ausgabe ist NaN

    
ordago 27.05.2015 07:31
quelle
0

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.

    
Ravindra 27.05.2015 08:04
quelle

Tags und Links