摘要:的使用函数可将字符串转换为代码执行,并返回一个或多个值调用时,实例为代码的返回值的返回值遵循以下规则如果的参数不是字符串,那么将直接返回参数。错误将这个函数表达式解释为函数的声明,使得它没有任何的返回值。
eval()的使用
eval() 函数可将字符串转换为代码执行,并返回一个或多个值
eval调用时,实例为eval( "( javascript代码 )" )
eval()的返回值
eval()的返回值遵循以下规则:
如果eval()的参数不是字符串,那么eval()将直接返回参数。
如果eval()的参数是字符串,那么eval()将这个字符串解析成代码后进行执行,并返回最后一行代码执行的结果。
如果字符串无法解析成合法的代码,eval()将抛出SyntaxError错误。
举例1(eval的参数不是字符串):
运行结果(谷歌浏览器测试):
举例2(eval的参数是字符串):
运行结果(谷歌浏览器测试):
当然,如果不使用eval()方法,上面的代码可以使用匿名函数写
举例3(字符串无法解析成合法的代码):
运行结果(谷歌浏览器测试):此时可以看到 谷歌浏览器控制台报错
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也同样没有问题。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/80780.html
摘要:最简单的区分所有浏览器都会显示为紫色会显示红色会变为蓝色会变为绿色上面的样式解释为顺序是显示的结果用浏览,颜色是紫色用浏览,颜色是红色用浏览,颜色是蓝色用浏览,颜色是绿色支持伪元素伪元素和在及以下不支持兼容可以识别写法和兼容则需要引 1. 最简单的CSS Hack 区分 IE6 、 IE7 、IE8 css .color{ background-color: #CC00FF; ...
摘要:五总结和应对方案安全性分析是否安全主要由数据源决定,如果数据源不安全,只是提供了一种攻击方法而已。方案严格管控数据源。方案低频使用时影响不大,不要高频使用,建议寻找替代方案。方案了解直接调用和间接调用的区别,遇到问题时不要懵逼即可。 为什么要少用eval? eval是 js 中一个强大的方法。都说eval == evil等于true,这篇文章将研讨eval的几个缺点和使用注意事项。 目...
摘要:单引号与双引号我们看到一开始的举例中小明使用单引号来套双引号,如果反过来写呢,如小明相信也不少人习惯用双引号套单引号结果使用来转化也会报错兼容问题浏览器中不支持使用方法转成对象,所以需要引入一个文件。 相信大部分人都知道或者去百度检索都会得到将js中的字符串转化成json对象常见的3种方法 举例: var str = {name:小明,age:18}; 将字符串转化json对象: ...
阅读 3199·2021-09-22 15:58
阅读 1699·2019-08-30 14:17
阅读 1700·2019-08-28 18:05
阅读 1466·2019-08-26 13:33
阅读 661·2019-08-26 12:20
阅读 588·2019-08-26 12:18
阅读 3180·2019-08-26 11:59
阅读 1378·2019-08-26 10:36