Eval vs execscript

时间:2012-08-31 02:37:48

标签: javascript eval

实际上网络上的每个javascript指南都向我大声说eval是坏的,不要使用它,它是一个安全漏洞和诸如此类的东西。最近我发现了window.execScript,它似乎与eval做同样的事情。在安全性或速度方面,一个比另一个好吗?

3 个答案:

答案 0 :(得分:6)

window.execScript没有跨越浏览器,只有IE支持它。

答案 1 :(得分:5)

eval很糟糕,但大部分时间都可以用new Function替换,它更安全,而且是跨浏览器:

var foo = new Function('return 1 + 2');
var baz = eval('function(){ return 1 + 2 }');

主要区别在于范围访问。 eval会影响new Function创建另一个范围的局部变量。

答案 2 :(得分:0)

更新2019。

评估还不错,评估被误解了,而且确实很强大。几乎是我们开发人员工具所具有的力量。 Function构造函数具有与eval相同的目的,甚至具有相同的安全漏洞

  

Function构造函数创建一个新的Function对象。呼叫   构造函数可以直接创建函数,但会受到影响   来自安全性和类似(但重要性不高)的性能   评估问题。但是,与eval不同,Function构造函数创建   仅在全局范围内执行的功能。   块引用   https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function

在评估eval和Function的合法情况下,唯一真正的区别是范围的处理方式。

我建议阅读这两篇文章,以增进对这个主题的了解https://blogs.msdn.microsoft.com/ericlippert/2003/11/01/eval-is-evil-part-one/ https://javascriptweblog.wordpress.com/2010/04/19/how-evil-is-eval/

奖金: 如果您想让new FunctionFunction的行为相同,只需键入(0, eval)就可以使用间接评估 http://perfectionkills.com/global-eval-what-are-the-options/

因此,评估和功能几乎是相同的。

Ps。 execScript已过时。