eval can be harmful

1. eval的用法?

eval() 函数可以用来计算某个字符串,并执行其中的javascript代码。其语法eval(string);
如果传入的参数不是字符串,则直接返回这个参数。

2. eval在什么时候使用?

当我们预先不知道执行什么语句,只有条件和参数给定时才知道执行什么语句

3. why eval is evil ?

eval is evil这句话是Douglas Crockford 说的。“邪恶”通常意味着“危险”,或则更加准确的说:“能够通过简单的命令造成很大的问题”。那我们什么时候使用这些“邪恶”的东西。或则说当我们知道危险是什么时,如何采取适当的预防措施?

4. eval的危险性?

eval函数可能有许多小的问题,当时总的来说有两个大的问题,是人们认为eval邪恶的原因。(性能和代码注入)

eval can be harmful

性能 --运行eval函数需要运行解释器/编译器。如果你的代码是编译的,那么这是一个很大的问题,因为你需要调用一个很重的编译器。但是javascript是一门解释性语言,这意味着在一般的情况下eval函数并不可能有很大的性能影响。我认为,javascript在解析期间也是需要调用,解释器或编译器。而不是需要在单独的调用另一个解释器或编译器。这这种情况下eval函数并没有比浪费你时间的那些函数更“邪恶”

代码注入问题 eval可能在权限提升的情况下运行一些代码。比如在管理员或root权限下运行像"rm -rf something-important"这样的字符串。但是在浏览器中的javascript没有这个问题,因为程序无论如何都是在用自己的账户中运行。

5. eval is evil ?

可能每个独立的问题,都需要单独处理。当就本身而言,我并不认为eval is evil。

食用方式


//计算表达式的值
function _evil(fn) {
    var Fn = Function;  //一个变量指向Function,防止有些前端编译工具报错
    return new Fn('return ' + fn)();
}