-1

数式用に意図されたように、括弧を扱うためにjavascript evalを作成するにはどうすればよいですか?

このコード、例えば:

var a="(";
var b=")";
alert(eval(a+2+3+b))// returns 23 while I want to get an output of 5
4

4 に答える 4

6

その式は、呼び出される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
于 2013-07-15T18:31:03.247 に答える
4

わかりませんが、実際の算術演算子を入れると役立つかもしれません...

var a="(";
var b=")";
alert(eval(a+2+"+"+3+b));

しかし、ここで何が起こっているのですか:

aは文字列であり、文字列の+演算子は追加された値も文字列に変換します。

したがって、実際の追加を行うa+(2+3)+ba+2+"+"+3+b、実際に追加する必要があります。

于 2013-07-15T18:31:14.380 に答える
1

元の文字列を取得する方法はわかりませんが、それを文字ごとに配列に構築し、配列から文字列を作成できます。以下のスニペットは単純化された例です。

var a = '(',
    b = ')',
    stringToEval = [a, 2, '+', 3, b].join('');
alert(eval(stringToEval)); // alerts 5

次のものも使用できますconcat

stringToEval = ''.concat(a, 2, '+', 3, b);

しかし、配列を使用すると、より動的なソリューションになると思います。

于 2013-07-15T18:52:26.387 に答える
0

eval文字列を受け取り、それを JavaScript として評価します。あなたの例では、最終的に解析される文字列(23)(2+3). eval を正しく機能させるために必要なことは、次のようなものです。

var a = "(";
var b = ")";
var c = "2+3";
alert(eval(a+c+b));

これは次のように単純化されます。

alert(eval("(2+3)"));
于 2013-07-15T18:34:04.057 に答える