2015-07-15 3 views
13

Warum bewertet JavaScript plus mit einem String und ganzen Zahlen abhängig von der Stelle des Strings?Warum bewertet JavaScript plus mit string und int anders?

Ein Beispiel:

console.log("1" + 2 + 3); 
console.log(2 + 5 + "8"); 

Die erste Zeile druckt 123 und die zweite druckt 78.

+1

der erste wandelt das Ganze in String um. der zweite beginnt, die Zahlen zu addieren, bis er den String sieht, wenn er dann das ganze Ding in einen String konvertiert. –

+1

Weil in Javascript '+' sowohl der Additions- als auch der Verkettungsoperand ist, und welcher angewendet wird, hängt von dem ersten Wert ab. –

+0

Weil String + String immer noch eine Zeichenkette ist. Das Hinzufügen eines Strings zu einem int-type-safe ist unmöglich, daher * erzwingt * der zweite Operand den gleichen Typ wie der erste. – doldt

Antwort

7

Typ-Konvertierung von JavaScript in den Fällen Sie folgert erwähnen, dass Sie suchen die Typen aller zu konvertieren Ihre Argumente entsprechen dem Typ Ihres ersten Arguments dem Operator +.

Deshalb erwähnen Sie im ersten Fall, dass mit der Zeichenfolge "1" die Addition die anderen Argumente in Strings konvertiert. Im zweiten Fall haben Sie console.log(2 + 5 + "8") erwähnt. Das erste Argument des Operators + ist eine Ganzzahl, weshalb die JavaScript-Typumwandlung davon ausgeht, dass Sie eine Ganzzahl wünschen.

2

Nun, das ist, weil der + Operator überlastet ist.

  • Wenn es mit zwei Ganzzahlen verwendet wird, fasst es sie zusammen.
  • Wenn es mit zwei Strings verwendet wird, verkettet es sie.
  • Wenn es zwischen einer Zeichenfolge und einer Ganzzahl verwendet wird, verkettet es sie.

Das ist, warum, wenn Sie das tun

console.log("1" + 2 + 3); 

Es verknüpft den ersten und zweiten Operanden (da der erste ist ein String), um eine Zeichenfolge zu geben, „12“, und es verkettet wieder mit der dritte Operand aus dem gleichen Grund.

Wenn Sie jedoch

console.log(2 + 5 + "8"); 

tun fasst es die ersten und zweiten Operanden (beide numerisch sein) 7 zu geben und schließlich verknüpft es mit dem dritten Operanden aus oben genannten Gründen.

0

Der Ausdruck auswertet von links nach rechts.

Also, wenn Sie "1" + 2 + 3 verwenden und die Arten der Operanden sind unterschiedlich, wird es anhängen, andernfalls, wenn die Typen ints sind, wird es hinzufügen.

case "1" + 2 + 3 
"1" +2 - different types- result - "12" string 
"12" + 3 - different types- result - "123" string 
case 2 + 5 + "8" 
2 + 5 - same types- result - 7 int 
7 + "8" - different types - result "78" string 
0

Ich denke, es heißt Ente Gießen. Wenn es wie eine Ente aussieht und quakt wie eine Ente, muss es eine Ente sein. Wenn es wie eine Zeichenfolge "1" aussieht, ist es wahrscheinlich eine Zeichenfolge.

JavaScript scheint auch von links nach rechts und von bestimmten (int) zu allgemeinen (string) zu bewerten.

In Ihrem ersten Beispiel, console.log ("1" + 2 + 3), bewertet es die "1" als String aufgrund der Anführungszeichen und unter der Annahme, dass Sie alles darauffolgend verketten wollen. Es schreibt "123" als Ergebnis. Im zweiten Beispiel, console.log (2 + 5 + "8"), nimmt es einen int und fügt einen anderen int hinzu, der 7 erzeugt, und trifft dann auf eine Zeichenkette. Es nimmt also an, dass Sie eine Verkettung machen wollen schreibt "78" als String. Wenn Sie streng int-Werte auswerten möchten, können Sie parseInt ("8") verwenden, um Ihre 8 zurück in einen int zu konvertieren.

Verwandte Themen