在Javascript中使用eval函数有什么用?

时间:2011-07-01 09:39:44

标签: javascript

<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>

5 个答案:

答案 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