Alternative to eval() javascript [duplicate]

Solution 1:

Javascript is a very flexible language in this regard. There are very very few cases where eval() is the right answer to any given question, and it certainly isn't necessary here.

If your a and b variables are part of an object, you can access them with string subscripts:

ie myobj.a could also be referenced as myobj['a'].

From that, you can use a variable for the subscript, and thus you can reference any element in myobj dynamically -- ie:

var myobj = {a : 5, b : 10};

var dynamicProperty1 = 'a';
var dynamicProperty2 = 'b';

//gives 15.
alert( myobj[dynamicProperty1] + myobj[dynamicProperty2] );

No eval() required. You can build the dynamicProperty strings however you wish, so there's virtually infinite flexibility.

If your a and b variables are globals, JS globals in the browser are actually children of the window object, so you can still use this technique even with globals.

ie your global variable a could also be accessed via window.a or window['a'], with the latter option allowing you to do the same dynamicProperty trick described above.

Hope that helps.

Solution 2:

do you mean that you want to calculate an equation that you can't know until you've received it?

if so see Calculate string value in javascript, not using eval .

in short:

eval CAN be used sometimes, but only if the equation string comes from a trusted source, and there you need something like evaluating dynamic equations.

Solution 3:

maybe using window['var' + num] might be more useful for you. i don't quite understand your question sorry.

Solution 4:

If you can collect them under an object like root = {a: 1, b: 2}, then

Object.observe(root, function(newValues) { 
    res = newValues.object.a + newValues.object.b;
});

can keep your res variable up to date whenever the a or b changes