实际上网络上的每个javascript指南都向我大声说eval是坏的,不要使用它,它是一个安全漏洞和诸如此类的东西。最近我发现了window.execScript,它似乎与eval做同样的事情。在安全性或速度方面,一个比另一个好吗?
答案 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 Function
或Function
的行为相同,只需键入(0, eval)
就可以使用间接评估
http://perfectionkills.com/global-eval-what-are-the-options/
因此,评估和功能几乎是相同的。
Ps。 execScript
已过时。