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

时间:2010-07-20 20:52:57

标签: javascript

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

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

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

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

抱歉新手问题!

诺曼

4 个答案:

答案 0 :(得分:10)

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

var foo = "global";

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

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

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

答案 1 :(得分:5)

eval()解释任意javascript语句,而使用窗口则访问窗口对象的属性。

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

您可以将eval("v"+e)声明视为等同于eval("window['v'" + e +" ]")

答案 2 :(得分:3)

两者都返回一个全局变量的值。不同之处在于,如果全局变量未定义,则执行eval()时会出错,而window ['variableName']将返回undefined(不是错误),因为访问未定义的属性不是错误,而是访问未定义的变量是一个错误。

答案 3 :(得分:2)

"v"+e - >串

eval(x) - >计算字符串x,包含javascript表达式

window[x] - >返回具有相同名称的窗口属性,因为x的值为。这实际上可以是一个全局变量

因此,当您拥有全局变量v1 = "foo"e = 1时,eval("v"+e)window["v" + e]都会返回“foo”