日期:2014-05-16  浏览次数:20324 次

抛弃eval吧。
刚看了这篇帖子 eval 获得对象用法 请教达人   有点感想,发上来供大家参考。

    eval在javascript语言精粹中被作者归为js的鸡肋特性之一,刚温习了下本书,下面是该书对eval的描述:

    eval函数传递一个字符串给javascript编译器,并且执行其结果。它是一个被滥用得最多的javascript特性。那些对javascript语言一知半解的人们最常用到它。例如:如果你知道点表示法,但不知道下标表示法,就可能会这么写:
    
    
eval("myValue = myObject." + myKey + ";");


    而不是这么写:

    
myValue = myObject[myKey];


    使用eval形式的代码会更加难以阅读。这种形式将使得性能显著降低,因为它必须运行编译器,但也许只是为了执行一个微不足道的赋值语句。它会让JSLint失效,因此该工具检测问题的能力也会显著降低。

    eval函数还减弱了你的应用的安全性,因为它给被求值的文本赋予了太多的权力。而且就像with语句执行的方式一样,它降低了语言的性能。

    Function构造器是eval的另一种形式,所以它同样也应该被避免使用。

    浏览器提供的setTimeout和setInterval函数,它们能接收字符串参数或函数参数。
    
    当传递的是字符串参数时,setTimeout和setInterval会像eval那样去处理。字符串参数形式也应该被避免使用。



    个人在开发中没有碰到过必须用eval的时候,都可以用别的形式替换,所以让我们抛弃eval吧。
    

------解决方案--------------------
可以选择不用
------解决方案--------------------
ActionScript 3.0自认为可以抛弃eval,于是...D.eval。


------解决方案--------------------
ajax怎么处理扔过来的js呢?
------解决方案--------------------
不能因为难以阅读,而抛弃它吧?这个理由好像不太合适
eval() 的功能虽然非常强大,但大家都知道在实际使用中用到它的情况并不多
所以根据实际情况选择!
------解决方案--------------------
不用算了。
------解决方案--------------------
我不是很赞同楼主的观点;如果抛弃了eval;我不知道如何处理JOSN数据信息;同时如果没有setTimeout和setInterval,呵呵;你的前端特效该如何做?同时楼主并没有说清楚不用eval的好处和使用eval的坏处,可见楼主对这方面的认识也是人云亦云罢了;
------解决方案--------------------
我很少去使用它,但有时候真的不用它解决起来麻烦的很

尤其是ajax要去跑返回的js代码的时候

也许,大多数情况你都可以很轻易的使用其它方式避免使用eval,但有时候的确还是用eval更方便一些

所以个人觉得,还是根据实际情况选择是否使用eval的好

存在,即合理
------解决方案--------------------
顶7楼
 存在即合理,因为有需求。
------解决方案--------------------
<script>
var a=1, b=2, ret=false;ret=a+b;  alert(ret);
//-------------------------

假设数据库中存储了上面那段运行代码;从数据库中取出后得到字串:
var str="var a=1, b=2, ret=false;ret=a+b;  alert('想办法让这个ALERT跳出来:'+ret);"
eval(str)//用eval(),轻而易举;

xxxyyyzzz...$#%^:             //不用eval(),楼主有更好的方法没?


</script>
------解决方案--------------------
顶七楼!
我一般都是用eval绑定一个ajax返回的json对象,数组之类的
------解决方案--------------------
引用:
ajax怎么处理扔过来的js呢?

lz 都说了可以用new Function