昨天突然想到,js里面,这种情况
var aa='console.log(123)';
代码就是上面这样,有什么方法可以让字符串里面的函数执行?推荐使用什么方法?
昨天突然想到,js里面,这种情况
var aa='console.log(123)';
代码就是上面这样,有什么方法可以让字符串里面的函数执行?推荐使用什么方法?
试了下 Function构造
的方法,在 严格模式
下,并没有生效
那么除了eval()之外,还有别的方法么?
都说不太建议使用eval(),有什么具体不好的地方的么?
求教!
不建议使用eval()的原因无非两点:
1.性能不佳
2.安全性
没有做过测试,eval()对性能的影响到底有多大,但是我相信题主不至于到处都使用eval(),而且对于现代浏览器而言,个人觉得性能的影响并不会很大。
最重要的一点是安全性,大家都知道,如果能执行字符串里的代码,那么凡是有输入的地方,那都有可能发生XSS攻击等。
不知道题主为什么一定要执行字符串里的代码,但是只要能做好安全防范,而且不是大量使用eval(),那就放心的用吧。
10 回答11.6k 阅读
2 回答3.1k 阅读✓ 已解决
3 回答2.7k 阅读✓ 已解决
4 回答2.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
3 回答773 阅读✓ 已解决
首先回答楼主,使用Function构造会比直接使用eval好一些:
eval这个关键字不建议使用,个中原因在秘密花园也有解释
http://bonsaiden.github.io/Ja...
不过花园中只一再提到不要使用eval,并且给了以下示范:
但却没有给出解决方案,我个人推荐做法,就是通过构造函数为‘期望执行的代码’创建新的函数作用域,尽可能减少对当前作用域的影响/污染
有其他解决方案也可以继续交流