<html>
<body>
<script type="text/javascript">
document.write("<br />" + eval("2+2"));
</script>
</body>
</html>
这使我输出为4。
如果我删除eval函数并运行相同的东西知道它给了我相同的输出4
<html>
<body>
<script type="text/javascript">
document.write("<br />" + (2+2);
</script>
</body>
</html>
答案 0 :(得分:2)
Eval允许您执行存储在变量中的命令:
<script type="text/javascript">
var cmd = "2+2";
document.write("<br />" + eval(cmd));
</script>
答案 1 :(得分:1)
你的观察是非常正确的。 eval()
除了evaluate
Javascript代码之外别无其他。因此结果是相同的。但是,eval()
的使用非常不受欢迎。这是出于安全和性能原因。
例如,Javascript引擎(至少大多数)总是尝试在访问性能方面优化代码。如果不深入,访问一个非常深的范围链属性是昂贵的,因此引擎将使用哈希查找表优化该访问。通过调用eval()
,不再可以使用此机制,因此查找属性的速度较慢。
这只是一个例子,为什么eval()
的使用不值得推荐,还有更多。
答案 2 :(得分:1)
eval
尝试执行字符串,就像它是一个脚本一样 - 在您的示例中(2+2)
不是字符串,因此它没有效果。
此外,eval
is evil ...
答案 3 :(得分:1)
使用'eval',您可以执行以下操作:
<html>
<body>
<script type="text/javascript">
var command = prompt('input command');
eval(command);
</script>
</body>
</html>
答案 4 :(得分:0)
eval()
接受一个字符串并将其评估为好像不是一个字符串。 (2+2)
不是字符串。
console.log (typeof (2+2)); // returns number
console.log (typeof "2+2"); // returns string