eval()的运用
eval() 函数可将字符串转换为代码实行,并返回一个或多个值
eval调用时,实例为eval( “( javascript代码 )” )
eval()的返回值
eval()的返回值遵照以下划定规矩:
- 假如eval()的参数不是字符串,那末eval()将直接返回参数。
- 假如eval()的参数是字符串,那末eval()将这个字符串剖析成代码后举行实行,并返回末了一行代码实行的效果。
- 假如字符串没法剖析成正当的代码,eval()将抛出SyntaxError毛病。
举例1(eval的参数不是字符串):
运转效果(谷歌浏览器测试):
举例2(eval的参数是字符串):
运转效果(谷歌浏览器测试):
固然,假如不运用eval()要领,上面的代码能够运用匿名函数写
举例3(字符串没法剖析成正当的代码):
[图片上传失败…(image-e61579-1612431403324)]
运转效果(谷歌浏览器测试):此时能够看到 谷歌浏览器控制台报错
eval()的兼容性问题
IE6/7/8不兼容
运用IE8来测试代码:
1 | var str = "function(){alert('Test eval')}"; |
没有弹出框,控制台报错:
解决要领:
a)var s = “function(){alert(‘Test!’)}”;
b)var s = “0?0:function(){alert(‘Test!’)}”;
固然这个解决要领是从外洋论坛内里找到(网站:http://stackoverflow.com/ques…)
[图片上传失败…(image-ee8f60-1612431403324)]
粗心是:这在JScript诠释器内里是一个bug,它不会出如今IE9除非你运用混淆形式或兼容来看。IE8毛病将这个函数表达式诠释为函数的声明,使得它没有任何的返回值。所以你能够写成其他比较典范的表达式,从从而在JScript诠释器中组成一个表达式。
那末我们就晓得IE6/7/8运用JScrip诠释器来剖析eval()把参数当初函数声明,没有返回值,所以我么能够把eval()函数内里的字符串代码写成一个表达式,即能够写成:
function(){alert(‘Test!’)} 或 0?0:function(){alert(‘Test!’)}
改代码:
1 | var str = "0 ? 0 : function(){alert('Test eval')}"; |
在IE8内里测试效果:
末了应用ietester东西测试在IE6也一样没有问题。
原文作者:东雄平
原文地址: https://segmentfault.com/a/1190000007394042