Rechenoperator als String
Olli
- javascript
Noch eine JS Frage.
Ich habe drei Strings
a="10"
b=">="
c="1"
Nun möchte ich folgendes ohne eval() machen:
if (eval(a+b+c)) { ... }
geht das?
Olli
Ich habe drei Strings
a="10"
b=">="
c="1"Nun möchte ich folgendes ohne eval() machen:
if (eval(a+b+c)) { ... }
geht das?
Ja:
var a = "10"
var b = ">="
var c = "1"
var myOp = function(op) {
return new Function('z1', 'z2' ,'return z1 '+ op +' z2');
};
var f = myOp(b);
alert(f(a, c));
Struppi.
Nun möchte ich folgendes ohne eval() machen:
Ja:
var a = "10"
var b = ">="
var c = "1"
var myOp = function(op) {
return new Function('z1', 'z2' ,'return z1 '+ op +' z2');
};
var f = myOp(b);
alert(f(a, c));
Ist damit zugegeben, dass in new Function("")
ein eval steckt?
mfg Beat
--
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische
Ist damit zugegeben, dass in new Function("")
ein eval steckt?
ja, genau wie z.b. auch bei einem setTimeout("bla()", x);
Struppi.
ja, genau wie z.b. auch bei einem setTimeout("bla()", x);
Wie jetzt? Steckt in Function("") ein eval drin? Also geht's doch nicht ohne eval?
ja, genau wie z.b. auch bei einem setTimeout("bla()", x);
Wie jetzt? Steckt in Function("") ein eval drin? Also geht's doch nicht ohne eval?
Naja, ob es jetzt 1:1 einem eval entspricht weiß ich nicht, aber vom Prinzip her geht das was du willst gar nicht anders. Du willst zur Laufzeit eine Rechenoperation erzeugen. Dazu brauchst du einen Mechanismus wie eval. Dafür ist er auch gedacht.
Struppi.
Ich habe mal gelesen, dass eval() nicht "gut" ist. Wenn man aber die Werte die eval() verarbeitet vorher validiert, spricht dann noch was gegen eval()?
Vielen Dank für die Antworten. Hat mir echt geholfen.
Ich habe mal gelesen, dass eval() nicht "gut" ist. Wenn man aber die Werte die eval() verarbeitet vorher validiert, spricht dann noch was gegen eval()?
Wie gesagt, für das was du willst (bzw. du sagst was du willst) musst du eval nehmen. eval hat Nachteile, wenn es geht sollte man es vermeiden. Aber wenn es sinnvoll ist spricht nichts dagegen es einzusetzen.
Struppi.
Vielen Dank euch beiden!
Hallo Olli,
Ich habe mal gelesen, dass eval() nicht "gut" ist.
das kann man pauschal nicht sagen. Es gibt auch Fälle, da ist eval gut.
Wenn man aber die Werte die eval() verarbeitet vorher validiert, spricht dann noch was gegen eval()?
eval läuft auf dem Rechner des Besuchers. Wenn da jemand versucht, über "böse" Eingaben irgendetwas zu manipulieren, macht er das auf und mit seinem eigenen Rechner. Der Hacker schießt sich quasi selbst ins Knie.
Eval wird allerdings oft (meistens?) auch in Fällen eingesetzt, wo es völlig überflüssig ist; daher kommt die weit verbreitete Meinung "eval is evil", die aber meiner Meinung nach aber "evil" ist. In Fällen wie deinem ist eval ok.
Gruß, Jürgen
PS Bei meinem Funktionsplot steht eval in einem try/catch-Block, damit falsche Eingaben nicht in der Fehlerkonsole landen, sonder der User per alert informiert wird.
Erstmal vielen Dank. Könnte man auch
var myOp = function() {
return new Function('return a '+ b +' c');
};
var f = myOp();
alert(f());
schreiben? Könntest Du vielleicht ein, zwei Worte zum Ablauf verlieren?
Olli
Hi,
Könntest Du vielleicht ein, zwei Worte zum Ablauf verlieren?
Bleiben denn nach der Lektüre des entsprechenden Abschnittes in SELFHTML noch Fragen offen?
http://de.selfhtml.org/javascript/objekte/function.htm#allgemeines
MfG ChrisB
Alles klar. Werd ich mir mal genauer anschauen.
Hi,
Ich habe drei Strings
a="10"
b=">="
c="1"Nun möchte ich folgendes ohne eval() machen:
if (eval(a+b+c)) { ... }
geht das?
Wenn die Zahl möglicher Operatoren begrenzt ist, kann man das auch über switch/case abbilden. Mit dem Vorteil, dass dabei nichts unerwartetes "durchflutscht".
MfG ChrisB