2023年6月21日发(作者:)

eval()的运⽤和兼容性问题eval()的运⽤eval() 函数可将字符串转换为代码实⾏,并返回⼀个或多个值eval调⽤时,实例为eval( “( javascript代码 )” )eval()的返回值eval()的返回值遵照以下划定规矩:1. 假如eval()的参数不是字符串,那末eval()将直接返回参数。2. 假如eval()的参数是字符串,那末eval()将这个字符串剖析成代码后举⾏实⾏,并返回末了⼀⾏代码实⾏的效果。3. 假如字符串没法剖析成正当的代码,eval()将抛出SyntaxError⽑病。举例1(eval的参数不是字符串):运转效果(⾕歌浏览器测试):举例2(eval的参数是字符串):运转效果(⾕歌浏览器测试):固然,假如不运⽤eval()要领,上⾯的代码能够运⽤匿名函数写举例3(字符串没法剖析成正当的代码):[图⽚上传失败...(image-e61579-24)]运转效果(⾕歌浏览器测试):此时能够看到 ⾕歌浏览器控制台报错eval()的兼容性问题IE6/7/8不兼容运⽤IE8来测试代码:var str = "function(){alert('Test eval')}";var fn = eval("(" + str + ")");fn();没有弹出框,控制台报错:解决要领:a)var s = “function(){alert(‘Test!’)}”;粗⼼是:这在JScript诠释器内⾥是⼀个bug,它不会出如今IE9除⾮你运⽤混淆形式或兼容来看。IE8⽑病将这个函数表达式诠释为函数的声明,使得它没有任何的返回值。所以你能够写成其他⽐较典范的表达式,从从⽽在JScript诠释器中组成⼀个表达式。那末我们就晓得IE6/7/8运⽤JScrip诠释器来剖析eval()把参数当初函数声明,没有返回值,所以我么能够把eval()函数内⾥的字符串代码写成⼀个表达式,即能够写成:function(){alert(‘Test!’)} 或 0?0:function(){alert(‘Test!’)}改代码:var str = "0 ? 0 : function(){alert('Test eval')}";var fn = eval("(" + str + ")");fn();在IE8内⾥测试效果:末了应⽤ietester东西测试在IE6也⼀样没有问题。

2023年6月21日发(作者:)

eval()的运⽤和兼容性问题eval()的运⽤eval() 函数可将字符串转换为代码实⾏,并返回⼀个或多个值eval调⽤时,实例为eval( “( javascript代码 )” )eval()的返回值eval()的返回值遵照以下划定规矩:1. 假如eval()的参数不是字符串,那末eval()将直接返回参数。2. 假如eval()的参数是字符串,那末eval()将这个字符串剖析成代码后举⾏实⾏,并返回末了⼀⾏代码实⾏的效果。3. 假如字符串没法剖析成正当的代码,eval()将抛出SyntaxError⽑病。举例1(eval的参数不是字符串):运转效果(⾕歌浏览器测试):举例2(eval的参数是字符串):运转效果(⾕歌浏览器测试):固然,假如不运⽤eval()要领,上⾯的代码能够运⽤匿名函数写举例3(字符串没法剖析成正当的代码):[图⽚上传失败...(image-e61579-24)]运转效果(⾕歌浏览器测试):此时能够看到 ⾕歌浏览器控制台报错eval()的兼容性问题IE6/7/8不兼容运⽤IE8来测试代码:var str = "function(){alert('Test eval')}";var fn = eval("(" + str + ")");fn();没有弹出框,控制台报错:解决要领:a)var s = “function(){alert(‘Test!’)}”;粗⼼是:这在JScript诠释器内⾥是⼀个bug,它不会出如今IE9除⾮你运⽤混淆形式或兼容来看。IE8⽑病将这个函数表达式诠释为函数的声明,使得它没有任何的返回值。所以你能够写成其他⽐较典范的表达式,从从⽽在JScript诠释器中组成⼀个表达式。那末我们就晓得IE6/7/8运⽤JScrip诠释器来剖析eval()把参数当初函数声明,没有返回值,所以我么能够把eval()函数内⾥的字符串代码写成⼀个表达式,即能够写成:function(){alert(‘Test!’)} 或 0?0:function(){alert(‘Test!’)}改代码:var str = "0 ? 0 : function(){alert('Test eval')}";var fn = eval("(" + str + ")");fn();在IE8内⾥测试效果:末了应⽤ietester东西测试在IE6也⼀样没有问题。