Variablen zusammenrechnen
David Hörpel
- javascript
Hi!
Ich habe mehrere Variablen in einem Frameset zwischengespeichert. Wenn ich nun diese zusammenrechnen will und dabei sind einige leer(=0), schreibt er mir alle Zahlen auf, anstatt sie zusammenzurechnen. Der Code ist dieser: <Script language="Javascript">document.write(+parent.ar+parent.ap+parent.an+parent.al+parent.aj+"€")
</Script> . Kann mir einer meinen Fehler sagen bzw. eine Änderung vorschlagen? Danke!
MfG David!
Hi!
Guezi,
Ich habe mehrere Variablen in einem Frameset zwischengespeichert. Wenn ich nun diese zusammenrechnen will und dabei sind einige leer(=0), schreibt er mir alle Zahlen auf, anstatt sie zusammenzurechnen.
Der Code ist dieser: <Script language="Javascript">document.write(+parent.ar+parent.ap+parent.an+parent.al+parent.aj+"€") </Script> .
Kann mir einer meinen Fehler sagen bzw. eine Änderung vorschlagen? Danke!
Du musst sicherstellen, dass die Felder wenigstens mit "0" gefüllt sind, sonst sieht der Interpreter die Variablien als Strings an.
MfG David!
Gruzz,
marcobk
Hallo,
Viele Grüße,
jürgen
Hallo,
- steht in JavaScript sowohl für eine Addition wie auch für eine Stringverknüpfung. Um sicher zu gehen, daß addiert wird, setze die Variablen in ein eval():
document.write(eval(parent.ar+parent.ap+parent.an+parent.al+parent.aj)+"€")
... das ist natürlich noch besser + einfacher...
Sollte klappen ...
Viele Grüße,
jürgen
marcobk
... das ist natürlich noch besser + einfacher...
Wenns klappt schon (hab da auch schon ulkige Effekte erlebt ?:-). Abgesehen davon würde ich das Euro-Zeichen nicht so reinschreiben, wenn schon dann â¬
Hallo,
- steht in JavaScript sowohl für eine Addition wie auch für eine Stringverknüpfung. Um sicher zu gehen, daß addiert wird, setze die Variablen in ein eval():
document.write(eval(parent.ar+parent.ap+parent.an+parent.al+parent.aj)+"€")
Sollte klappen ...
eval() ist böse[TM], außerdem macht es nichts anderes, als eine Javascript-Submaschine aufzumachen[1], in der der zu evaluierende Code ausgeführt wird. Wenn ohne eval() die Strings addiert werden, nicht die Zahlen, dann wird dies auch mit eval() geschehen.
Was besser ist: Die Strings explizit in eine Zahl wandeln und dann addieren. Und das Eurozeichen abgetrennt davon addieren (ansonsten erzwingt es möglicherweise, dass ein String zusammengesetzt wird, und keine Zahlen addiert werden:
document.write(String(parseFloat(parent.ar)+parseFloat(parent.ap)+parseFloat(parent.an)+parseFloat(parent.al)+parseFloat(parent.aj))+"€")
[1] an Antje & Co.: Ja, ist technisch nicht korrekt, aber beschreibt kurz das, was ungefähr geschieht. :)
- Sven Rautenberg
Hallo Sven,
was ist denn eigentlich so alles böse[TM] und vor allem warum? Bei Frames unterschreib ich das ja noch, aber das ist auch mehr persönliches Mißfallen als objektiv begründet.
Jürgen
Aloha!
was ist denn eigentlich so alles böse[TM] und vor allem warum? Bei Frames unterschreib ich das ja noch, aber das ist auch mehr persönliches Mißfallen als objektiv begründet.
eval() ist die eierlegende Wollmilchsau des Javascript.
Und weil das so ist, ist der Performanceaufwand, um eval() auszuführen, erheblich. Man kann damit im Prinzip beliebigen Javascript-Code, der sich im String befindet, ausführen! Man kann nachträglich Funktionen definieren! eval() ist sehr mächtig. Umso wahrscheinlicher ist, dass bei benutzerdefinierten Eingaben ganz zufällig das Falsche im String steht und eval() nicht, wie gewünscht, ein paar Zahlen zusammenzählt, sondern eine Funktion definiert oder den innerHTML-Wert vom Body auf Leerstring setzt.
Ok, das "böse[TM]" ist nicht ganz so böse, weil der Benutzer sich damit nur selbst schaden kann, aber nicht über seinen Browser hinaus, aber dennoch: eval() ist dann zu benutzen, wenn man es wirklich braucht, aber nicht leichtfertig einzusetzen, wenn andere Mittel ebenfalls, und meist besser, zum Ziel führen.
- Sven Rautenberg
Hallo,
- steht in JavaScript sowohl für eine Addition wie auch für eine Stringverknüpfung. Um sicher zu gehen, daß addiert wird, setze die Variablen in ein eval():
document.write(eval(parent.ar+parent.ap+parent.an+parent.al+parent.aj)+"€")
Sollte klappen ...
eval() braucht man praktisch nur dann, wenn man dynamischen JS-Code erzeugen moechte, z. B. einen Formelparser:
var a="Math";
b="sin";
c=0.5;
d=eval(a+"."+b+"("+c+")"); // ergibt Math.sin(0.5)
alert(d); // --> 0.479425538604203
MfG, Thomas