eval() nicht aus if-body aufrufbar?
Sebastian
- javascript
0 Alexander (HH)0 ChrisB
Hallo!
Ich bin zugegebenermaßen blutiger Anfänger in Sachen javascript-programmierung, und ich habe mich beim Ausprobieren in einem Spezialproblem festgebissen und möchte jetzt unbedingt wissen, warum es nicht funktioniert, obwohl es doch so offensichtlich scheint, dass es gehen müsste (oder doch nicht???).
hier mein code-ausschnitt:
function pruefen()
{
var inhalt = document.eingabe.feld.value;
var laenge = inhalt.length;
var letzte_eingabe = inhalt.charAt(laenge-1);
[...]
if (letzte_eingabe == '+' || letzte_eingabe == '-' || letzte_eingabe == '*' || letzte_eingabe == '/')
{
inhalt = inhalt.substring(0,(laenge - 1)) + '\n' + letzte_eingabe + '\n';
document.eingabe.feld.value = inhalt;
document.eingabe.ergebnis.value = eval(inhalt); // an dieser Stelle wird die zeile einfach ignoriert.
}
// document.eingabe.ergebnis.value = eval(inhalt); // hier dagegen funktioniert's!
}
Wenn jemand dazu einen Hinweis hätte, wäre ich sehr dankbar.
Moin Moin!
eval() ist in 99,99% aller Fälle ein sicheres Zeichen dafür, dass Du etwas falsch anpackst. Die restlichen 0,01% entfallen auf die obligatorische erste Iteration der Taschenrechner-in-Javascript-und-HTML-Demonstration. (Die zweite Iteration eleminiert eval().)
Also, was ist Dein eigentliches Problem?
Alexander
eval() ist in 99,99% aller Fälle ein sicheres Zeichen dafür, dass Du etwas falsch anpackst.
das nehme ich mal so und lass es einfach. tatsächlich habe ich versucht, mir einen eigenen taschenrechner zu bauen, der nach eingabe eines operators einen zeilenumbruch einfügt, sodass die einzelnen zahlen jeweils in einer zeile im textfeld stehen und dazwischen die operatoren. nach eingabe eines operators soll in einem anderen feld das mittels eval berechnete ergebnis ausgegeben werden.
naja, wie gesagt: anfängerexperimente – kein wichtiges ding.
von eval wird ja anscheinend allerorts abgeraten, das nehme ich mir dann mal zu herzen für die weiteren studien.
Danke für die Antworten,
Sebastian
Hi,
if (letzte_eingabe == '+' || letzte_eingabe == '-' || letzte_eingabe == '*' || letzte_eingabe == '/')
{ inhalt = inhalt.substring(0,(laenge - 1)) + '\n' + letzte_eingabe + '\n'; document.eingabe.feld.value = inhalt; document.eingabe.ergebnis.value = eval(inhalt); // an dieser Stelle wird die zeile einfach ignoriert. }
// document.eingabe.ergebnis.value = eval(inhalt); // hier dagegen funktioniert's!
}
JavaScript tendiert seltenst dazu, irgendetwas einfach zu „ignorieren”.
Wenn du etwas falsch machst, dann bekommst du iaR. eine Fehlermeldung.
Allerdings kann es sein, dass dir diese unterschlagen wird, wenn du eval verwendest - was mit einer der Hauptgründe ist, es möglichst gar nicht erst zu benutzen, denn es erschwert oftmals die Fehlersuche doch erheblich.
> inhalt = inhalt.substring(0,(laenge - 1)) + '\n' + letzte\_eingabe + '\n';
Du hast uns leider keine Information darüber gegeben, was bei dem, was du hier zusammenbaust, letztendlich herauskommt.
Die Zeilenumbrüche, die du da einbaust, legen zumindest den Verdacht nahe, dass du damit vielleicht einen ungültigen JavaScript-Ausdruck zusammenbastelst - etwas, das nach JS-Syntax \*so\* nicht über mehrere Zeilen gehen dürfte, es bei dir aber doch tut. Und das normalerweise eine entsprechende Fehlermeldung in der Konsole werfen müsste, es hier aber u.U. eben wegen des Einsatzes von eval nicht tut.
Aber um das genauer beurteilen zu können, müsstest du uns erst mal brauchbarere Informationen liefern.
MfG ChrisB
--
“Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]