参数:
codeString
必选。
包含有效JScript代码的字符串。
override
可选项。
确定要应用于codeString中代码的安全权限的字符串。
eval函数允许动态执行JScript源代码。
传递给eval方法的代码执行时所在的上下文和调用eval方法时的上下文一样。
请注意,在eval语句中定义的新变量或类型对于封闭程序是不可见的。
除非将字符串“unsafe”传递为第二个参数,否则,传递至eval方法的代码在受限安全上下文中执行。
受限安全上下文禁止访问系统资源,如文件系统、网络或用户界面。
如果代码试图访问这些资源,则会产生安全异常。
当eval的第二个参数为字符串“unsafe”时,传递给eval方法的代码在调用代码所在的安全上下文中执行。
第二个参数是区分大小写的,因此,字符串“Unsafe”或“UnSAfE”不会重写受限安全上下文。
示例:例如,下面的代码将变量mydate初始化为测试日期或当前日期,这取决于变量doTest的值:
var doTest:boolean=true;
var dateFn:String;
if(doTest)
dateFn="Date(1971,3,8)";
else
dateFn="Date()";
var mydate:Date;
eval("mydate=new"+dateFn+";");
print(mydate);
该程序的输出为:ThuApr800:00:00PDT1971
eval()的危害
eval()接受任意的字符串,并当作JavaScript代码来处理,这个机制已经有安全隐患了!一般生成对象建议用JavaScript内置的方法处理比如解析json的时候用JSON.parse()如果在流程中必须使用eval()的时候建议考虑newFunction()代替。
有一个小的潜在好处,因为在新Function()中作代码评估是在局部函数作用域中运行,所以代码中任何被评估的通过var定义的变量都不会自动变成全局变量。
如果您觉得本文的内容对您的学习有所帮助:
关键字:
Js中eval函数的详解与危害