[JavaScript]eval
eval()
eval()
函数会将传入的字符串当做 JavaScript 代码进行执行。
参数
string 一个表示 JavaScript 表达式、语句或一系列语句的字符串。表达式可以包含变量与已存在对象的属性。返回值
返回字符串中代码的返回值。如果返回值为空,则返回 undefined。说明
-
如果字符串表示的是表达式,eval() 会对表达式进行求值。
-
如果参数表示一个或多个 JavaScript 语句,那么eval() 就会执行这些语句。
-
总之一句话,
食之无味,弃之可惜示例一:
eval(new String("2 + 2")); // 返回了包含"2 + 2"的字符串对象 eval("2 + 2"); // returns 4
示例二:
var s = "console.log('RoastDuck');"; eval(s);
-
通常,可以对语句进行加密,之后直接丢给eval执行。
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}(' 3 2(){ 4 6 = "0"; 1.5(6); }2()',62,7,'RoastDuck|console|fn|function|let|log|name'.split('|'),0,{}))
执行结果:
RoastDuck
-
eval 中函数作为字符串被定义需要用“()”
var fctStr1 = 'function a() {}' var fctStr2 = '(function a() {})' var fct1 = eval(fctStr1) // 返回 undefined var fct2 = eval(fctStr2) // 返回一个函数
永远不要使用 eval!
eval()
是一个危险的函数,它使用与调用者相同的权限执行代码。如果你用 eval()
运行的字符串代码被恶意方(不怀好意的人)修改,您最终可能会在您的网页/扩展程序的权限下,在用户计算机上运行恶意代码。更重要的是,第三方代码可以看到某一个 eval()
被调用时的作用域,这也有可能导致一些不同方式的攻击。
分类:
javaScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了