vue怎么使用eval_eval()的使用和兼容性问题

本文详细介绍了JavaScript的eval()函数的工作原理,包括如何执行字符串代码以及其返回值规则。同时,文章着重讨论了eval()在IE6/7/8中的兼容性问题,演示了遇到的问题和解决方案,通过添加表达式来确保函数在这些旧版IE浏览器中正确执行。
摘要由CSDN通过智能技术生成

eval()的使用

eval() 函数可将字符串转换为代码执行,并返回一个或多个值

eval调用时,实例为eval( "( javascript代码 )" )

eval()的返回值

eval()的返回值遵循以下规则:

如果eval()的参数不是字符串,那么eval()将直接返回参数。

如果eval()的参数是字符串,那么eval()将这个字符串解析成代码后进行执行,并返回最后一行代码执行的结果。

如果字符串无法解析成合法的代码,eval()将抛出SyntaxError错误。

举例1(eval的参数不是字符串):

运行结果(谷歌浏览器测试):

举例2(eval的参数是字符串):

运行结果(谷歌浏览器测试):

当然,如果不使用eval()方法,上面的代码可以使用匿名函数写

举例3(字符串无法解析成合法的代码):

运行结果(谷歌浏览器测试):此时可以看到 谷歌浏览器控制台报错

eval()的兼容性问题

IE6/7/8不兼容

使用IE8来测试代码:

var str = "function(){alert('Test eval')}";

var fn = eval("(" + str + ")");

fn();

没有弹出框,控制台报错:

解决方法:

a)var s = "function(){alert('Test!')}";

b)var s = "0?0:function(){alert('Test!')}";

当然这个解决方法是从国外论坛里面找到(网站:http://stackoverflow.com/ques...

大意是:这在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也同样没有问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值