2016-04-05 5 views
0

文字列をJavascriptの式として評価したいと思います。動的なJSONから文字列を読み込んでいます。だから、表現は何でもかまいません。ここで私が使用している疑似コードはJavascriptフロントエンド - 文字列を式として評価する - eval()を使用する代わりに

var formula = { 
    "expression":"value * 9/5 + 32" //Dynamic JSON 
} 

var value = 26; // Dynamic value 

var result = evaluateExpression(value, formula); 

function evaluateExpression(value, formula) { 
    return eval(formula.expression); 
} 

これは私がeval()を使ってきた方法です。これに他の選択肢はありますか?私はMath.jsの使用を検討しましたが、これは私の要求には過剰です。

+1

を達成することができました。 –

+0

evalで何が問題になっていますか?それはあなたが必要とするものです。 – Rana

+0

私がこの質問で触れたように、動的文字列を式として評価するだけでいいです。上の例のサンプル文字列は "value * 9/5 + 32"です。これは正常に動作します。私はちょうどこれを行うための代替方法があるかどうかを知りたかったのです –

答えて

0

evalの代わりに、javascriptでパーサーと評価版を作成することもできます。これはやや些細なことですが、少し面倒です。 evalは、他のユーザーのブラウザで1人のユーザーから提供された文字列を評価しない限り、大部分は問題ありません。このような場合は、パーサーを作成する必要があります(または、PEG.jsなどのツールを使用して生成する必要があります)。

+0

私は、インタプリタを書くことの難しさは、解釈された表現の複雑さによって大きく異なると言いますが、私は決してそれを*と呼んでいません。 –

0

あなたは私たちが最初の場所で*は何の要件は*知らない同じ使用してFunctionコンストラクタ

var formula = { 
 
    "expression":"value * 9/5 + 32" //Dynamic JSON 
 
} 
 

 
var value = 26; // Dynamic value 
 

 
var result = evaluateExpression(value, formula); 
 
alert(result); 
 

 
function evaluateExpression(value, formula) { 
 
    return (new Function('value', 'return (' + formula.expression + ')')(value)); 
 
    //return eval(formula.expression); 
 
}

+0

これが 'eval'よりも優れている理由を追加してください。 – Bergi

+0

@Bergi新しい関数内の文は、evalが現在のスコープで実行される新しいスコープで実行されます。 evalで渡された式のローカル変数を更新した場合。更新されます。また、式の文字列で使用される可能性のある変数を、関数コンストラクタのパラメータとして分離することによって、その変数を追跡する方が簡単になります –

関連する問題