我一直在javascript中使用这两个...真的不知道区别。谷歌搜索总是显示“窗口对象”或“在javascript中打开一个新窗口”的结果,所以在那里找不到任何东西。
eval("v"+e)
window["v"+e]
有时窗口适合我,有时候eval工作......
那么eval()和window []之间的区别是什么?
抱歉新手问题!
诺曼
答案 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”