9

I've been using both in javascript ... really don't know the difference. Googling always shows results for the "window object" or "opening a new window in javascript" so couldn't find anything there.

 eval("v"+e)
 window["v"+e]

Sometimes window works for me and at other times eval works ....

So what's the difference between eval() and window[] ?

Sorry for the newbie question though !

Norman

Norman
  • 705
  • 1
  • 10
  • 24
  • 2
    Could you state that as a question, please? Specifically, what are you really asking? – Robusto Jul 20 '10 at 20:55
  • Whatever the answer, don't use eval! – jasongetsdown Jul 20 '10 at 21:09
  • I think it's pretty clear that the question is "please explain the situation to me". – Grumdrig Jul 20 '10 at 21:14
  • @ jasongetsdown - small question ... why shouldn't eval be used ? Is there a better way to access local variables like so var c = eval("ev"+d); where d=1 locally (this value is passed to a function) and I want to set the value of c equal to the value of local varable ev1 ? – Norman Jul 20 '10 at 21:53
  • @Norman: the answer to that is, if you're new and using `eval`, you're probably doing something wrong. Eval does have a purpose, but newcomers probably aren't using it for that. (this is an old question that was recently brought up, so this question is meant for others) – vol7ron Apr 09 '12 at 04:00

4 Answers4

14

Another point that has not been addressed is that eval will resolve the variable reference using the caller variable environment, for example:

var foo = "global";

(function () {
  var foo = "local";
  alert(eval("foo")); // alerts "local"
  alert(window["foo"]); // alerts "global"
})();

So as you can see, is not completely equivalent.

If you simply want to reference a global variable, I would recommend you to use the window[prop] approach and avoid surprises.

Christian C. Salvadó
  • 807,428
  • 183
  • 922
  • 838
  • So in order to access local variables use window otherwise use eval ? ... why do so many people discourage the use of eval? is there another way to access local variables like so eval("ev"+d); where d=1 locally and I want to access the value of local varable ev1 ? – Norman Jul 20 '10 at 21:49
  • 1
    @Norman, to access global variables use `window[prop]`, see [this question](http://stackoverflow.com/questions/86513/why-is-using-javascript-eval-function-a-bad-idea) to know why you shouldn't use `eval` when you don't need it.. – Christian C. Salvadó Jul 20 '10 at 22:00
6

eval() interprets arbitrary javascript statements, whereas with window you are accessing a property of the window object.

In your example, you seem to be using a property name in both eval() and window[]. As the global scope in a browser is the same as the window object's scope they will evaluate to the same thing.

You can think of your eval("v"+e) statement as being equivalent to eval("window['v'" + e +" ]").

Paul Grime
  • 14,970
  • 4
  • 36
  • 58
4

Both return a global variable's value. The difference is that if the global variable is undefined, you will get an error on executing eval() whereas window['variableName'] will return undefined(not an error) because accessing an undefined property is not an error but accessing an undefined variable is an error.

Marimuthu Madasamy
  • 13,126
  • 4
  • 30
  • 52
3

"v"+e -> string

eval(x) -> evaluates the string x, containing javascript expression

window[x] -> returns window's property with the same name, as tha value of x is. this in fact can be a global variable

therefore, when you have a global variable v1 = "foo", and e = 1, then eval("v"+e) and window["v" + e] both return "foo"

mykhal
  • 19,175
  • 11
  • 72
  • 80