window []和eval()之间的区别 - Javascript

Nor*_*an 7 javascript

我一直在javascript中使用它们......真的不知道区别.谷歌搜索总是显示"窗口对象"或"在javascript中打开一个新窗口"的结果,所以在那里找不到任何东西.

 eval("v"+e)
 window["v"+e]
Run Code Online (Sandbox Code Playgroud)

有时窗口适合我,有时候eval工作....

那么eval()和window []之间的区别是什么?

抱歉新手问题!

诺曼

CMS*_*CMS 11

另一个尚未解决的问题是,eval将使用调用者变量环境解析变量引用,例如:

var foo = "global";

(function () {
  var foo = "local";
  alert(eval("foo")); // alerts "local"
  alert(window["foo"]); // alerts "global"
})();
Run Code Online (Sandbox Code Playgroud)

所以你可以看到,并不完全等同.

如果您只想引用全局变量,我建议您使用该window[prop]方法并避免意外.


Pau*_*ime 6

eval()解释任意javascript语句,而使用窗口,您正在访问窗口对象的属性.

在您的示例中,您似乎在eval()和window []中都使用了属性名称.由于浏览器中的全局范围与窗口对象的范围相同,因此它们将评估相同的内容.

您可以将您的eval("v"+e)陈述视为等同于eval("window['v'" + e +" ]").