什么是更好的做法:eval或追加脚本?

我需要执行一些我从一些AJAX调用中获得的自定义JavaScript。 我可以对字符串进行eval ,或者我可以将它附加到DOM的script标签中。 哪种方法会更好?

 var dynamicScript = 'alert(\'Hello world!\');'; 

方法1 – 脚本

 var x = '' + dynamicScript +''; $(document.body).append(x); 

方法2 – 评估

 eval(dynamicScript); 

什么方法更好,为什么? 还是有更好的选择?

我更喜欢eval ,因为它通常比创建脚本标记更快 ,并附加它(特别是如果你想使用jQuery创建和插入它)。

附注(脚本标记的有用应用) 我还使用脚本标记插入方法:在Google Chrome的扩展中,注入脚本标记是在页面范围内运行代码的唯一方法,因为window对象是沙盒。

PS。 jQuery.getScript() 。 这种方法可能很有用。

这两种方法对你正在做的事情都没有那么好。 您的AJAX调用应该返回数据而不是序列化脚本。 您的两种方法都可以打开脚本注入。

eval应该不惜一切代价。 这是缓慢而危险的, eval是邪恶的

如果ajax调用返回带脚本标记的html,则可以使用$ .load()导入脚本。

http://api.jquery.com/load/

将其添加到DOM。 原因(来自http://ajaxpatterns.org/On-Demand_Javascript ):

JavaScript将自动进行评估,其方式与首次遇到标记时评估静态HTML中链接的JavaScript的方式大致相同。 您可以在不将其添加到窗口的情况下声明裸函数或变量。

您可以从外部域加载JavaScript。

URL指向特定的Javascript资源。 使用XMLHttpRequest,可以获得更大的灵活性:例如,您可以在不同的XML节点内发送多个JavaScript代码段。

DOM以不同的方式受到影响。 即使行为是暂时的,脚本也会被添加到DOM中,而在XMLHttpRequest回调之后它会消失。