gpt4 book ai didi

javascript - 使用 eval() 定义变量显示未定义错误

转载 作者:行者123 更新时间:2023-11-28 12:03:44 30 4
gpt4 key购买 nike

直接定义变量时,它可以工作。如下面的代码,body的背景色在IE浏览器中为浅绿色,在非IE浏览器中为浅蓝色。

<html>
<body>
<script>
if (window.attachEvent) {
var YourBrowserIsIE = true;
}

if (YourBrowserIsIE) {
document.body.style.backgroundColor = 'lightgreen';
}
else {
document.body.style.backgroundColor = 'lightblue';
}
</script>
</body>
</html>


但是,有时需要使用 eval() 定义变量,如下所示,但结果会显示错误,提示 YourBrowserIsIE 在非 IE 浏览器中未定义。

if (window.attachEvent) {
eval('var YourBrowserIsIE = true;');
}


是的,我知道我可以为非 IE 浏览器预定义 var YourBrowserIsIE = false; 或将 if 语句更改为 if (typeof YourBrowserIsIE != 'undefined'),但我希望代码尽可能少。

那么有没有一种解决方案可以使用 eval() 定义变量并使用简单的 if (YourBrowserIsIE) 检查变量,而不会在非 IE 浏览器中显示任何错误?


==编辑==

很抱歉不清楚。上面提到的使用eval()的情况实际上是为了检测IE版本。请看下面的代码。

<html>
<body>
<script>
if (window.attachEvent) {
var version = /msie (\d+)/i.exec(navigator.userAgent)[1];
eval('var YourBrowserIsIE' + version + ' = true;');
}

if (YourBrowserIsIE9) {
document.body.style.backgroundColor = 'lightgreen';
}
else {
document.body.style.backgroundColor = 'lightblue';
}
</script>
</body>
</html>

最佳答案

but I want to keep the code as minimum as possible

那不是window.YourBrowserIsIE = window.attachEvent;吗?

我看到它有两个优点:

  1. 这是最小的
  2. 不需要eval

看到您的代码,我建议根本不要使用 YourBrowserIsIE,而是使用:

document.body.style.backgroundColor = window.attachEvent 
? 'lightgreen' : 'lightblue';

看到您的编辑,可能/将会是:

document.body.style.backgroundColor = 
+((/msie (\d+)/i.exec(navigator.userAgent)||[0])[1]) === 9
? 'lightgreen' : 'lightblue';

如果它必须是一个可重用的变量,我会抽搐一下回到解决方案 1:

window['YourBrowserIsIE'+((/msie (\d+)/i.exec(navigator.userAgent)||[0])[1]] 
= true;
document.body.style.backgroundColor = window.YourBrowserIsIE9 ?
? 'lightgreen' : 'lightblue';

关于javascript - 使用 eval() 定义变量显示未定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12242260/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com