Javascript Eval vs execscript
实际上,web上的每一个javascript指南都对我大喊eval不好,不要使用它,它是一个安全漏洞等等。最近我发现了window.execScript,它似乎和eval做了同样的事情。在安全性或速度方面,一个比另一个好吗?Javascript Eval vs execscript,javascript,eval,Javascript,Eval,实际上,web上的每一个javascript指南都对我大喊eval不好,不要使用它,它是一个安全漏洞等等。最近我发现了window.execScript,它似乎和eval做了同样的事情。在安全性或速度方面,一个比另一个好吗?窗口。execScript不跨浏览器,只有IE支持它。eval不好,但大多数情况下可以用新功能替换它,它更安全,更交叉: var foo = new Function('return 1 + 2'); var baz = eval('function(){ return 1
窗口。execScript
不跨浏览器,只有IE支持它。eval
不好,但大多数情况下可以用新功能替换它,它更安全,更交叉:
var foo = new Function('return 1 + 2');
var baz = eval('function(){ return 1 + 2 }');
主要区别在于范围访问eval
会影响局部变量,而新函数
会创建另一个作用域。更新2019
Eval并不坏,Eval被误解了,它真的很强大。这正是我们的开发人员工具的动力所在。函数构造函数的作用与eval相同,甚至具有相同的安全漏洞
函数构造函数创建一个新的函数对象。呼叫
构造函数可以直接动态创建函数,但会受到影响
从安全性和类似(但不太重要)的性能
需要评估的问题。但是,与eval不同,函数构造函数创建
仅在全局范围内执行的函数。
块引用
对于eval和Function来说,有很多合法的例子,但真正的区别在于如何处理范围
我建议阅读这两篇文章来增加对这个主题的理解
奖金:
如果您想让新函数
或函数
具有相同的行为,只需键入(0,eval)
现在,eval和函数基本相同
Ps.execScript
已被弃用。完全一样吗?@Delta检查这篇文章本页建议Chrome中的作品应该是var foo=new函数('return 1+2')();你在结尾处漏掉了()从Chrome的调试控制台运行baz
行会给我一个“未捕获的语法错误:意外标记”(“你为baz
编写的代码不起作用。你需要将function(){…}
包装在()
中,使其成为有效的函数表达式,否则它将无法运行:const baz=eval('(function()){return 1+2;});
来自“IHTMLWindow2::execScript不再受支持。从Internet Explorer 11开始,使用eval”。