Automatische Konvertierung in JavaScript

8

Die folgenden Ausdrücke in JavaScript sind offensichtlich.

%Vor%

Der Wert von x ist 20 .

%Vor%

Der Wert von x ist in diesem Fall 1010 , weil der Operator + überladen ist. Wenn einer der Operanden vom Typ string ist, wird eine String-Verkettung durchgeführt, und wenn alle Operanden Zahlen sind, wird eine Addition durchgeführt.

%Vor%

In beiden Fällen ist der Wert von x 0 , weil der Operator - auf diese Weise nicht überladen wird und alle Operanden in Zahlen konvertiert werden, wenn sie nicht vor der tatsächlichen Subtraktion ausgeführt werden (Sie können klären, wenn ich falsch liege).

Was im folgenden Ausdruck passiert.

%Vor%

Der Wert von x ist 250 . Das scheint auch offensichtlich zu sein, aber dieser Ausdruck scheint in gewisser Weise dem folgenden Ausdruck zu entsprechen.

%Vor%

Wenn das der Fall gewesen wäre, dann wären diese beiden Strings verkettet worden und hätten 100150 bis x zugewiesen. Warum wird in diesem Fall eine Addition durchgeführt?

BEARBEITEN:

+'10' + 5 gibt 15 und 'a' + + 'b' gibt aNaN zurück. Weiß jemand warum?

    
Tiny 19.10.2012, 20:38
quelle

5 Antworten

3

In Ihrem Fall wird - - nicht zuerst ausgewertet, um zu + zu werden. -"150" wird als Zahl ausgewertet und somit -150 .

Da Sie keine Zeichenfolge ( NaN ) subtrahieren können, nehmen Sie dann "100" und machen Sie eine Zahl, und dann 100 - -150 , was 250 ist.

Der Schlüssel ist wirklich, dass Sie den Typ string nicht subtrahieren können, also konvertiert er diese Zeichenfolgen in Zahlen.

    
Simon Boudrias 19.10.2012, 20:45
quelle
3

Die Operatoren + und - reagieren unterschiedlich auf Strings.

Der Operator + verkettet Strings; Der Operator "-" führt jedoch nicht den umgekehrten Vorgang durch (geteilte Strings).

Wenn JavaScript also '100' +'150' sieht, denkt es "Hey, ich sehe Strings mit einem + ... ich kann sie verketten."

Wenn JS '100' - -'150' sieht, denkt es: "Hey, ich sehe Strings mit einem - .. ich kann wirklich keine String-Funktionen machen, also behandle ich sie als Zahlen ..."

    
edward ingram 19.10.2012 20:50
quelle
2

Der unäre Operator - konvertiert seinen Operanden immer in Nummer (ECMA-262 s. 11.4.6). Also

%Vor%

entspricht

%Vor%

was sich weiter auf

reduziert %Vor%

, weil der binäre Operator - auch immer seine Operanden in Zahl umwandelt (s. 11.6.2).

Im Gegensatz dazu konvertiert der unäre Operator + seine Operanden in Strings, wenn eine der beiden bereits eine Zeichenkette ist (s. 11.6.1).

Sie finden die vollständige Spezifikation für ECMAscript (und damit für den Kern von Javascript) unter Ссылка .

    
aecolley 19.10.2012 20:49
quelle
1

Wenn JS sieht, dass der Minus-Operator in einer Zeichenkette verwendet wird, versucht es zunächst, es in Zahl zu schreiben und bewertet dann den Ausdruck, weil der Minus-Operator nur für arithmetische Operationen verwendet wird. Plus-Operator könnte in erster Linie Verkettung und dann Addition bedeuten.

In einigen anderen schwach typisierten Sprachen wie PHP wird diese Mehrdeutigkeit eliminiert, indem zwei verschiedene Operatoren für die Verkettung und Addition verwendet werden.

Die beste Methode zur Verwendung von Arithmetik in Zeichenfolgen besteht jedoch darin, sie manuell in Zahlen zu schreiben (mit parseInt ). .

    
Boris D. Teoharov 19.10.2012 20:55
quelle
1

Zusatz

Diese Tabelle zeigt das Ergebnis verschiedener Konvertierungen, bei denen die Variable s=string und n=number ist. Sie können auch Ihre eigenen Werte mit dem bereitgestellten Code-Snippet ausprobieren.

Dieser Thread beantwortet einige Fragen, die ich hatte. Und deshalb poste ich meine Testergebnisse, um anderen zu helfen, die hier nach Antworten suchen.

%Vor%

%Vor% %Vor% %Vor%
    
Roberto 20.03.2016 21:39
quelle

Tags und Links