- 浏览: 543090 次
- 性别:
- 来自: 湖南娄底
文章分类
- 全部博客 (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 1075To 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 3112目前,我们的U盘和Mail中对含有中文文件名的下载处理都不是太 ... -
前端开发工具箱 (js & css 代码压缩、优化
2012-02-25 09:59 0前端开发工具箱 (js & css 代码压缩、优化) ... -
servlet tomcat web.xml配置信息说明
2012-02-17 10:42 1458过滤器: 1.类型配置1[解决请求期间,数据库sess ... -
数据库连接池技术的总结
2012-02-14 11:51 01.Proxool的数据库连接池配置信息: <prox ... -
http协议那点事!
2012-02-13 21:52 1020作为一个开发者,尤其 ... -
运用proxool连接池
2012-01-10 10:19 1007最近做的一个项目中运用到了连接池技术,可能我们大家比较熟悉的 ... -
兼容 ie,ff,Google,safari,opera 的回车事件
2012-01-09 16:56 1053http://oraclestudy.iteye.com/bl ... -
Tomcat Error Page配置 与 Error Page在IE下不能转发的问题
2012-01-09 13:46 3260Tomcat Error Page配 ... -
网页背景音乐使用方法
2011-11-22 12:25 1010一、学会添加音乐文 ... -
Java Pet Store 2.0 应用程序简介
2011-11-14 17:48 3596http://developers.sun.com.cn/Ja ... -
在服务器端判断request来自Ajax请求(异步)还是传统请求(同步)
2011-11-14 12:23 1261在服务器端判断request 来自Ajax请求(异步)还 ... -
Java Pet Store 2.0 应用程序简介
2011-11-14 09:08 898使用 Ajax 创建用于无缝数据交互的 Web 2.0 ... -
部署war文件到Apache Tomcat服务器
2011-11-17 14:45 5215下面我将描述正确的部署.war(web application ... -
网站开发 html控件和css篇
2011-11-13 18:32 9351.文本框; <input id="word ... -
关于Session生命周期的问题
2011-11-13 01:35 1634以下情况,Session结束生命周期,Servlet容器将Se ...
相关推荐
在Web开发中,Ajax(Asynchronous JavaScript and XML)技术常用于实现网页的异步更新,使得用户无需刷新整个页面就能获取和更新数据。然而,Ajax在处理字符编码时可能会遇到问题,特别是当服务器返回的数据采用不同...
### 深入认识JavaScript中的eval函数 #### 一、eval函数概述 在JavaScript中,`eval`函数是一个内置函数,它可以将字符串形式的代码解析并执行。这为开发者提供了一种灵活的方式来动态生成和执行代码。然而,由于...
JavaScript中的`eval`函数是一个非常强大但又充满争议的工具,它可以解析并执行一个字符串作为JavaScript代码。在处理动态生成的代码或者从服务器接收到的数据时,`eval`经常被用到。然而,由于安全性和性能上的风险...
JavaScript中的eval函数是一个非常特殊的函数,它能够计算并执行一个字符串形式的JavaScript代码。eval函数的使用方法相对简单,但是它的作用及其对作用域的影响则需要格外注意。 首先,eval函数的基本语法是eval...
JavaScript中的`eval()`函数是一个非常强大但又充满争议的工具,它允许我们将字符串作为JavaScript代码执行。在初学JavaScript时,很多人可能都听说过`eval()`,但对其具体用途和潜在风险不太了解。本文将深入探讨`...
JavaScript中的`eval`和`window.eval`都是用来执行动态JavaScript代码的函数,但它们在不同浏览器中的行为有所差异。理解这些差异对于编写可移植的、安全的JavaScript代码至关重要。 首先,`eval`函数是一个全局...
在JavaScript中,eval函数是一个内置的对象,主要用于执行一个字符串表达式,并返回表达式的值。eval函数的使用需要谨慎,因为它会执行一段字符串中的JavaScript代码,并且这种执行方式可能会带来安全问题。 1. ...
Js解混淆最关键的部分: l eval或者[removed]、VBS的EXECUTE、execScript之类的可以运行js的函数 l unescape js的混淆一般有几种方法: 1. 把代码通过escape转换成hex形式的代码,让人看不懂 2. 把代码进行简单的...
JavaScript 的 `eval` 函数是一个强大且复杂的工具,主要用于将字符串转化为可执行的 ...对于在函数内部执行全局代码,可以利用浏览器的特定方法,如 `execScript` 和 `window.eval`,但也要注意浏览器兼容性问题。
需要注意的是,eval()和with语句通常不推荐在现代JavaScript编码实践中使用,因为它们可能导致代码难以理解、难以维护,还可能影响性能。现代JavaScript开发中,更加推荐使用更加安全、性能更好的方法来实现类似的...
它们都是早期JavaScript中用于处理URL字符串的方法,但已被 `encodeURI()` 和 `decodeURI()` 所取代。 **编码示例**: ```javascript // 使用escape()方法编码字符串 var encodedStr = escape("黑客防线"); console...
具体实现是首先需要在项目中引入msscript.ocx文件,然后在OnDocumentComplete事件中获取文档的父窗口,并将窗口对象添加到IScriptControl对象中,之后即可使用raw_Eval方法执行JavaScript代码。 以上三种方法各有优...
本文介绍了三种常用的VC调用JavaScript的方法:通过`execScript`方法调用、使用`GetIDsOfNames`和`Invoke`方法以及利用`IScriptControl::raw_Eval`方法。每种方法都有其特点和适用场景,开发者可以根据实际需求选择...
其他被废弃的方法包括execScript()、window.scrollByLines()和window.scrollByPages(),以及通过link.styleSheet引用样式表的方法。这些方法都有基于W3C标准的替代方案,例如使用eval()执行JavaScript代码,以及使用...
接着,针对IE浏览器使用`window.execScript`,对于其他浏览器则使用`window.eval`来执行JavaScript代码。 这种方法的优点在于,它既考虑了不同浏览器的兼容性,又避免了使用eval的潜在风险,同时解决了JavaScript...
在IT行业中,前端开发经常会遇到文件上传的需求,jQuery作为一个广泛使用的JavaScript库,提供了方便的API来简化这个过程。本文将详细讲解如何使用jQuery实现表单文件上传并获取回调信息。 首先,我们需要理解...