javascript addition
AndreasVogt
- javascript
0 Tabellenkalk0 JürgenB0 j4nk3y0 1unitedpower0 mark0 Rolf b0 1unitedpower0 Rolf b
0 AndreasVogt
Hallo, ich will per javascript Zahlen mit String addieren wie folgt:
var startNum = 1;
var str1 = startNum + ',' + startNum + 1 + ',' + startNum + 2 + ',';
alert(str1);
Eigentlich sollte der String "1,2,3,"
herauskommen.
habe schon versucht startNum
mit parseInt()
zu konvertieren, ohne Erfolg.
Dann habe ich startNum
mit 1
multipliziert (hab ich wo gelesen), ohne Erfolg.
Ergebnis ist "1,11,12,"
Was mach ich falsch? Gruß Andreas
Hallo,
der +-Operator ist in JS sowohl für Addition von Zahlen als auch für das Verketten von Strings zuständig. Wenn du nur Zahlen hast wird addiert. Sobald ein String mitmacht wird verkettet.
Gruß
Kalk
Hallo Andreas,
setz mal die Rechenoperationen in Klammern.
Gruß
Jürgen
Hallo,
ich freue mich über deinen Humor, aber das funktioniert deshalb, weil ++
kein Stringoperator ist.
Gruß
Jürgen
Hey,
ich freue mich über deinen Humor, aber das funktioniert deshalb, weil
++
kein Stringoperator ist.
Ich weiß, hätte aber nicht gedacht das, dies so auseinander gehalten wird.
Gruß
Jo
ich freue mich über deinen Humor, aber das funktioniert deshalb, weil ++ kein Stringoperator ist.
Ich weiß, hätte aber nicht gedacht das, dies so auseinander gehalten wird.
Die Erklärung ist auch nicht ganz korrekt. Die richtige Begründung ist, dass der ++
-Postfix-Operator eine höhere Präzedenz (17) als der binäre +
-Operator (13) hat. Damit (und weil +
links-assoziativ ist) ist dem Parser klar, dass der Term die folgende syntaktische Struktur haben muss:
((((((startNum++) + ',') + (startNum++)) + ',') + (startNum++)) + ',')
Hey,
Die Erklärung ist auch nicht ganz korrekt. Die richtige Begründung ist, dass der
++
-Postfix-Operator eine höhere Präzedenz (17) als der binäre+
-Operator (13) hat. Damit (und weil+
links-assoziativ ist) ist dem Parser klar, dass der Term die folgende syntaktische Struktur haben muss:
((((((startNum++) + ',') + (startNum++)) + ',') + (startNum++)) + ',')
Starke Erklärung, danke!
Gruß
Jo
Aloha ;)
Witzig das, dass funktioniert.
Hast du deinen Satzbau Bäumchen-Wechsel-dich spielen lassen? 😉
*scnr*
Grüße,
RIDER
Der Plus-Operator ist in JavaScript überladen. Er dient zur Addition von Float-Zahlen und zum Verbinden von Zeichenketten. Und weil das noch nicht Verwirrung genug ist, nimmt sich JavaScript auch noch die Freiheit die Typen der Argumente anzupassen, wenn sie nicht übereinstimmen. Was nicht passt, wird passend gemacht. Die Regeln, nach denen das funktioniert, kann sich kein Mensch merken. Ich würde die Verkettung und die Addition nicht miteinander in einem Term vermischen, sondern die Verkettung durch Template-Literale ersetzen. Das macht den Code auch gleich besser lesbar:
var startNum = 1;
var str1 = `${startNum}, ${startNum + 1}, ${startNum + 2},`;
var str1 = `${startNum}, ${startNum + 1}, ${startNum + 2},`;
Nur zur Ergänzung: Das ist ES6 und funktioniert im IE und Safari laut MDN nicht.
Wollte gerade schon hektisch zur Spec rennen, das hab ich bisher in JS noch nicht gesehen.
Danke für den Versionshinweis.
Rolf
Mangelnder Browser-Support muss heute kein Grund mehr sein, um auf den Einsatz von neuen JavaScript-Features zu verzichten. Man kann relativ mühelos EcmaScript 2015 Code schreiben und ihn in ES5.1 oder noch ältere Versionen übersetzen lassen, zum Beispiel mit babel oder TypeScript. Die modernen Dialekte bieten natürlich viel mehr als nur Template-Literale, ich würde heute eine Fülle an Features vermissen, wenn ich dazu verdammt wäre in einer älteren Version zu programmieren.
Und mangelnde Dokumentation in SelfHTML muss kein Grund zur Unwissenheit sein - ich hab mal was dazu verfasst und bitte um konstruktive Kritik :)
Rolf
Danke an alle für die Hilfe, funktioniert jetzt.
Gruß Andreas