抛弃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对象,数组之类的
------解决方案--------------------
lz 都说了可以用new Function