Difference between window[] and eval() - Javascript

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.


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 +" ]").


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.

Tags:

Javascript