Eval vs execscript
Eval vs execscript
实际上,网络上的每个javascript指南都对我大喊eval不好,不要使用它,它是一个安全漏洞等等。最近我发现了window.execScript,它似乎做了与eval相同的事情。在安全性或速度方面,一个比另一个好吗?
window.execScript
没有跨浏览器,只有IE支持它。
eval
很糟糕,但大多数时候可以用new Function
代替,它更安全,而且是跨浏览器的:
var foo = new Function('return 1 + 2');
var baz = eval('function(){ return 1 + 2 }');
主要区别在于范围访问。eval
可以影响new Function
创建另一个作用域的局部变量。
更新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)
简单地使用间接evalhttp://perfectionkills.com/global-eval-what-are-the-options/
现在,eval和Function基本上是一样的。
Ps。execScript
已被弃用。
更新2021
如果你正在研究eval,并且你打算做一个沙盒,请帮自己一个忙,并使用类似的东西https://codesandbox.io/post/sandpack-announcementsandpack
解决了javascript沙箱实现时的大部分问题。
- setInteval vs setTimeout
- $(this).prop('property') vs. this.property
- Js.erb VS按钮标记-不'不起作用.为什么?
- reactjs this.refs vs document.getElementById
- Performance: NaCl vs Emscripten
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- Advantages to DOMParser vs template & innerHTML
- JavaScript-===vs===运算符性能
- 开发第三方小部件-Angular vs jQuery vs普通的旧JS
- PhantomJS(vs nightwatch.js)设置cookie错误
- Javascript events: window.event vs argument reference (funct
- 需要确认我对Servlet vs RESTful网页的理解's的差异
- "#"keyCode=222 vs 51(Chrome与Android版Chrome)-为什么有区别
- .notion vs.[]notation |插入到文本对象中
- Javascript-使用“”将toDateStringMonth从文本字符串解析为数字字符串;如果“;vs“;开关”;
- 没有框架/DLL的VS Web应用程序项目
- Eval vs execscript
- VS代码:在<脚本>标签
- Object.prototype.hasOwnProperty.call() vs Object.prototype.h
- document.hidden vs document.hasFocus() 之间的区别