数式用に意図されたように、括弧を扱うためにjavascript evalを作成するにはどうすればよいですか?
このコード、例えば:
var a="(";
var b=")";
alert(eval(a+2+3+b))// returns 23 while I want to get an output of 5
数式用に意図されたように、括弧を扱うためにjavascript evalを作成するにはどうすればよいですか?
このコード、例えば:
var a="(";
var b=")";
alert(eval(a+2+3+b))// returns 23 while I want to get an output of 5
その式は、呼び出されるa+2+3+b
前に評価されます。eval
あなたは文字通り呼び出しています:
alert(eval("(23)"));
を eval に渡す場合+
は、eval に渡す文字列の一部にする必要があります。
alert(eval(2+"+"+3)); // 5
あなたの質問について:
数式用に意図されたように、括弧を扱うためにjavascript evalを作成するにはどうすればよいですか?
何もする必要はありません。括弧内の部分式は、その値を式全体で使用する前に完全に評価する必要があるため、括弧内はすべて最初に評価されます。元。(演算子の代数的順序から期待されるのと同じように):
2*(0+3) // 6
2* 0+3 // 3
わかりませんが、実際の算術演算子を入れると役立つかもしれません...
var a="(";
var b=")";
alert(eval(a+2+"+"+3+b));
しかし、ここで何が起こっているのですか:
a
は文字列であり、文字列の+
演算子は追加された値も文字列に変換します。
したがって、実際の追加を行うa+(2+3)+b
かa+2+"+"+3+b
、実際に追加する必要があります。
元の文字列を取得する方法はわかりませんが、それを文字ごとに配列に構築し、配列から文字列を作成できます。以下のスニペットは単純化された例です。
var a = '(',
b = ')',
stringToEval = [a, 2, '+', 3, b].join('');
alert(eval(stringToEval)); // alerts 5
次のものも使用できますconcat
。
stringToEval = ''.concat(a, 2, '+', 3, b);
しかし、配列を使用すると、より動的なソリューションになると思います。
eval
文字列を受け取り、それを JavaScript として評価します。あなたの例では、最終的に解析される文字列(23)
は(2+3)
. eval を正しく機能させるために必要なことは、次のようなものです。
var a = "(";
var b = ")";
var c = "2+3";
alert(eval(a+c+b));
これは次のように単純化されます。
alert(eval("(2+3)"));