- 浏览: 534716 次
- 性别:
- 来自: 湖南娄底
文章分类
- 全部博客 (252)
- C#资料 (0)
- java资料 (22)
- 数据库资料 (0)
- Java :开发中遇到的问题 (4)
- 书写属于我的人生 (6)
- spring (6)
- hibernate (16)
- struts (17)
- SSH (5)
- Linux操作系统 (1)
- Ext (5)
- Jquery (9)
- Tomcat部署出错 (2)
- xml (5)
- JSON (5)
- javascript 专题 (5)
- 开发环境配置 (2)
- web 开发 (27)
- Eclipse (7)
- Integration (1)
- 解决方案搜罗 (7)
- 网站收藏 (8)
- 测试框架 (1)
- iframe 专题 (6)
- JSTL (2)
- 各种插件收集 (2)
- 权限设计模型探讨 (1)
- DWR (1)
- log4j (3)
- java (11)
- java 格式化 (1)
- 软件工程 (2)
- 乱码专题 (1)
- UML (4)
- java 设计模式 篇 (1)
- 用法收集 (0)
- sourceforge apache solutions (2)
- Struts2 + JPA + Spring 开发 (1)
- 自定义工具箱 (0)
- IDE (4)
- opencms (1)
- jeecms (1)
- ant (0)
- maven (2)
- 数据库连接池 (0)
- spring MVC (0)
- android (1)
- web-server (1)
- iphone-开发环境 (1)
- iphone-软件开发 (6)
- iPhone-软件设计 (1)
- iphone-应用 (3)
- iPhone-设置 (2)
- iphone-软件开发-设计模式篇 (0)
- iphone-软件开发-OC基础 (9)
- iphone-软件开发- UI篇 (9)
- iphone-软件开发-工具类篇 (1)
- iphone-软件开发-第三方篇 (0)
- iphone-软件开发-特效篇 (2)
- iphone-软件开发-动画篇 (1)
- oracle (1)
- Java-Security (0)
- Three20 UI (1)
- IOS-HOW-TO-专题 (1)
- Mark-Develope Issues (1)
- iphone-软件开发- 资料参考篇 (1)
- C 语言-基本语法 (0)
- Java Servlet (2)
- Eclipse optimization (1)
- IOS Basic (0)
- ecl (0)
- FRONT-HTML (0)
- FRONT-JS (0)
- PHP (0)
最新评论
-
qq_29862421:
[[color=brown]color=yellow][url ...
java 上传图片同时获得图片的宽和高 -
hhb19900618:
NSString <==> NSNumber 之前 ...
OC 常用数据类型之间的转换 -
baohuan_love:
果然能解决问题,感谢分享
Tomcat Error Page配置 与 Error Page在IE下不能转发的问题 -
唐丽梅6313:
很细致。。
键盘样式风格有关设置-iOS开发 -
olived:
哥哥,为什么我的没有破解成功,总是提示许可文件丢失!!QQ:3 ...
[软件测试解决方案] soapUI 4.0.1破解方法
http://blog.csdn.net/on_load_1988/article/details/5342823
eval的作用其实很简单,就是把一段字符串传递给JS解释器,由Javascript解释器将这段字符串解释成Javascript代码,并且执行他。
举个最简单的例子:
代码如下:
<script type="text/javascript">
eval("alert(1+1)");
</script>
很简单,把字符串解释成JS代码并执行,弹出2。
当然,上面的
例子只是个玩具,在实际中没有人会傻到这么用。我想大家最基本的使用eval函数都是应该在DOM中,例如我们有div1,div2,div3,那么在
document.getElementByID时我们的ID没有办法去得到,那么最简单的办法就是在for循环中,使用eval来拼接这么一段程序。例
如这样:
代码如下:
<script type="text/javascript">
for (var loop = 1; loop < 10; loop++) {
eval('document.getElementById("div"+loop).innerHTML="123"');
}
</script>
最基本的用法说完,相信大家还是对这个函数意犹未尽,如果这个函数只有这么点用法,那就太无聊了。那我们就一点点来剖下一下eval()函数。
我们就先从eval的作用域说起,先看这样一段函数:
代码如下:
<script type="text/javascript">
eval("var i=3");
alert(i);
</script>
代码很简单,结果可以弹出3。接下来再对比这段代码:
代码如下:
<script type="text/javascript">
var test = function () {
eval("var i=3");
alert(i);
}
test();
alert(i);
</script>
结果是首先弹出3,然后是undefined。
那么说明:eval()函数动态执行的代码并不会创建新的作用域,其代码就是在当前的作用域执行的。因此也就是说,eval()函数也完全可以使用当前作用域的this,argument等对象。
在IE中,支持这样一种和eval()非常类似的函数叫做:execScript()。我们可以来写段简单的代码。
代码如下:
<script type="text/javascript">
var test = function () {
execScript("var i=3");
alert(i);
}
test();
alert(i);
</script>
结果弹出了2个3,这也就看出了execScript函数的特点,首先他
和eval相类似,都能将字符串解释成JS代码并且执行,但是他的作用域不是当前作用域,而是全局作用域。当我们把上面的代码放到Firefox和谷歌浏
览器上去试试:发现在Firefox上execScript上代码是无效的,那么也说明一个问题,execScript代码的浏览器兼容性是有问题的。
那么就引申出这样一个问题,我们如何能把这两个函数的“优点”给汇总到一起呢,也就是说,全局+浏览器兼容性。上网搜了下,自己给汇总了一下,大概是这样:
代码如下:
<script type="text/javascript">
var StrongEval = function (code) {
if (window.navigator.userAgent.indexOf("MSIE") >= 1) {
execScript(code);
}
if (window.navigator.userAgent.indexOf("Firefox") >= 1) {
window.eval(code);
}
else {
execScript(code);
}
};
var Test = function () {
StrongEval("var i=3");
}
Test();
alert(i);
</script>
这样就可以完美地兼容FF和IE了,其本质代码就在于在FF中eval和window.eval并不等效,这是个很奇妙的事。
另外,我们还可以用eval+with实现一些奇淫技巧。
我们在一般意义上可以写出这样的代码:
代码如下:
var obj = function () {
this.a = 1;
this.b = 2;
this.c = 5;
this.fun = function () {
this.c = this.a + this.b;
}
};
var o = new obj();
o.fun();
alert(o.c);
或者是这样:
代码如下:
var obj = {
a: 1,
b: 2,
c: 5,
fun: function () {
this.c = this.a + this.b;
}
}
再或者是这样:
代码如下:
var obj = function () {
this.a = 1;
this.b = 2;
this.c = 5;
};
obj.prototype.fun = function () {
this.c = this.a + this.b;
}
var o = new obj();
o.fun();
alert(o.c);
无论怎么样,你是不是对这样的this感觉厌烦了呢?那就让我们采取个很另类的办法吧,让至少在感官上可能会舒服一点。
代码如下:
<script type="text/javascript">
var funtemp = function () {
c = a + b;
}
var obj = {
a: 1,
b: 2,
c: 5
};
var fun;
with (obj) {
eval("fun = " + funtemp);
}
fun();
alert(obj.c);
</script>
这个很勉强,那么好,我们不讨论什么看着舒服不舒服。我们来讨论这样一种情况。
代码如下:
<script>
var DBCommon = function () {
alert("1."); CreateConnection();
alert("2."); OpenConnection();
alert("3."); CreateCommand();
alert("4."); ExcuteCommand();
alert("5."); CloseConnection();
}
var SQLServerCommon = {
CreateConnection: function () { alert("建立SQL Server连接"); },
OpenConnection: function () { alert("打开SQL Server连接"); },
CreateCommand: function () { alert("创建¨SQL Server命令"); },
ExcuteCommand: function () { alert("执行DSQL Server命令"); },
CloseConnection: function () { alert("关闭SQL Server连接"); }
};
var OracleCommon = {
CreateConnection: function () { alert("建立¢Oracle连接"); },
OpenConnection: function () { alert("打开aOracle连接"); },
CreateCommand: function () { alert("创建¨Oracle命令"); },
ExcuteCommand: function () { alert("执行DOracle命令"); },
CloseConnection: function () { alert("关闭?Oracle连接"); }
};
with (SQLServerCommon) {
eval("forSQLServer=" + DBCommon);
}
with (OracleCommon) {
eval("forOracle=" + DBCommon);
}
forSQLServer();
forOracle();
</script>
我们又是否可以把这个看成是一个简陋的模板方法模式呢?呵呵。我们也可以把这个称为利用eval和with配合改变函数的上下文。
不过话又说回来,Eval在一般的情况中是很少被用到的,我们是完全可以避免来使用它的。
详细出处参考:http://www.jb51.net/article/21793.htm
发表评论
-
Installing Tomcat on Mac OS X
2013-02-28 16:15 1046To get Tomcat, visit the follo ... -
How to iterate HashMap using JSTL forEach loop
2012-10-05 18:47 0JavaServer Tag library is one o ... -
URL重写技术urlrewrite
2012-09-21 11:27 0需要一个urlrewritefilter的包,这个包是个开 ... -
Session 和 Cookie 以及 URL重写那些事
2012-09-17 23:05 0Cookies 是服务器在本地机器上存储的小段文本并随每一个 ... -
swfupload 解决方案
2012-06-12 16:56 0据说是完美解决方案: http://blog.csdn.ne ... -
解决不同浏览器上中文文件名的下载乱码问题
2012-02-27 20:55 3082目前,我们的U盘和Mail中对含有中文文件名的下载处理都不是太 ... -
前端开发工具箱 (js & css 代码压缩、优化
2012-02-25 09:59 0前端开发工具箱 (js & css 代码压缩、优化) ... -
servlet tomcat web.xml配置信息说明
2012-02-17 10:42 1434过滤器: 1.类型配置1[解决请求期间,数据库sess ... -
数据库连接池技术的总结
2012-02-14 11:51 01.Proxool的数据库连接池配置信息: <prox ... -
http协议那点事!
2012-02-13 21:52 1000作为一个开发者,尤其 ... -
运用proxool连接池
2012-01-10 10:19 976最近做的一个项目中运用到了连接池技术,可能我们大家比较熟悉的 ... -
兼容 ie,ff,Google,safari,opera 的回车事件
2012-01-09 16:56 1019http://oraclestudy.iteye.com/bl ... -
Tomcat Error Page配置 与 Error Page在IE下不能转发的问题
2012-01-09 13:46 3226Tomcat Error Page配 ... -
网页背景音乐使用方法
2011-11-22 12:25 980一、学会添加音乐文 ... -
Java Pet Store 2.0 应用程序简介
2011-11-14 17:48 3569http://developers.sun.com.cn/Ja ... -
在服务器端判断request来自Ajax请求(异步)还是传统请求(同步)
2011-11-14 12:23 1234在服务器端判断request 来自Ajax请求(异步)还 ... -
Java Pet Store 2.0 应用程序简介
2011-11-14 09:08 879使用 Ajax 创建用于无缝数据交互的 Web 2.0 ... -
部署war文件到Apache Tomcat服务器
2011-11-17 14:45 5177下面我将描述正确的部署.war(web application ... -
网站开发 html控件和css篇
2011-11-13 18:32 9041.文本框; <input id="word ... -
关于Session生命周期的问题
2011-11-13 01:35 1612以下情况,Session结束生命周期,Servlet容器将Se ...
相关推荐
使用java来实现js中eval的功能,包括字符串的计算,判断真假等功能
javascript中eval和with用法实例总结.docx
本文实例分析了javascript中eval函数用法。分享给大家供大家参考。具体分析如下: eval()只有一个参数,如果传入的参数不是字符串,则直接返回这个参数。否则会将字符串当成js代码进行编译,如果编译失败则...
在Javascript中Eval函数的使用
js中eval()函数和trim()去掉字符串左右空格应用.docx
在利eval函数执行一段代码时,必须要去掉里面的换行符和回车符,但如果不去掉注释,会出现问题,就是注释后面的所有内容不执行,被当作是注释的内容,所以还要去掉各种注释,这里的解决方案可以把所有注释都去掉
JavaScript有许多小窍门来使编程更加容易。其中之一就是eval()函数,这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它。
javascript中eval函数用法分析.docx
本文实例讲述了javascript中eval和with用法。分享给大家供大家参考,具体如下: 我们都知道javascript的作用域机制,但是with和eval有时会“破坏”我们对于作用域的常规理解。下面参考网上资源和自己理解总结一下...
NULL 博文链接:https://dolphin-ygj.iteye.com/blog/517237
javascript中eval解析JSON字符串.docx
javascript eval和JSON之间的联系
NULL 博文链接:https://javasam.iteye.com/blog/1461999
深入认识javascript中得eval函数深入认识javascript中得eval函数深入认识javascript中得eval函数
第二题: xmlhttp 载入页的javascript脚本,不能执行。事件的驱动却仍然可用,前段时间为了回避这东西,干脆把脚本全写一起了。恶心,总这么干,每次都要载入几百K的js文件,恶心。 那么,现在有时间了,最用正统的...
利用js代码还原被eval编码后的js代码,还可以实现eval加密
用EVAL 方式 压缩指定目录下所有JS文件,一般发布项目的时候用,可以大量节省网页加载JS 的时间。下载压缩包,解压后放到tomcat里面,直接访问,按页面提示操作即可,简洁明了
ide-eval-resetter-2.3.5-c80a1d.zipide-eval-resetter-2.3.5-c80a1d.zipide-eval-resetter-2.3.5-c80a1d.zipide-eval-resetter-2.3.5-c80a1d.zipide-eval-resetter-2.3.5-c80a1d.zipide-eval-resetter-2.3.5-c80a1d...