Javascript中Eval函数的使用


Posted in Javascript onMarch 23, 2010

【eval()函数】
JavaScript有许多小窍门来使编程更加容易。
其中之一就是eval()函数,这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它。
举个小例子:

var the_unevaled_answer = "2 + 3"; 
var the_evaled_answer = eval("2 + 3"); 
alert("the un-evaled answer is " + the_unevaled_answer + " and the evaled answer is " + the_evaled_answer);

如果你运行这段eval程序, 你将会看到在JavaScript里字符串"2 + 3"实际上被执行了。
所以当你把the_evaled_answer的值设成 eval("2 + 3")时, JavaScript将会明白并把2和3的和返回给the_evaled_answer。
这个看起来似乎有点傻,其实可以做出很有趣的事。比如使用eval你可以根据用户的输入直接创建函数。
这可以使程序根据时间或用户输入的不同而使程序本身发生变化,通过举一反三,你可以获得惊人的效果。
在实际中,eval很少被用到,但也许你见过有人使用eval来获取难以索引的对象。
文档对象模型(DOM)的问题之一是:有时你要获取你要求的对象简直就是痛苦。
例如,这里有一个函数询问用户要变换哪个图象:变换哪个图象你可以用下面这个函数:
function swapOne() 
{ 
var the_image = prompt("change parrot or cheese",""); 
var the_image_object; 
if (the_image == "parrot") 
{ 
the_image_object = window.document.parrot; 
} 
else 
{ 
the_image_object = window.document.cheese; 
} 
the_image_object.src = "ant.gif"; 
}

连同这些image标记:
[img src="/stuff3a/parrot.gif" name="parrot"]
[img src="/stuff3a/cheese.gif" name="cheese"]
请注意象这样的几行语句:
the_image_object = window.document.parrot;
它把一个图象对象敷给了一个变量。虽然看起来有点儿奇怪,它在语法上却毫无问题。
但当你有100个而不是两个图象时怎么办?你只好写上一大堆的 if-then-else语句,要是能象这样就好了:
function swapTwo() 
{ 
var the_image = prompt("change parrot or cheese",""); 
window.document.the_image.src = "ant.gif"; 
}

不幸的是, JavaScript将会寻找名字叫 the_image而不是你所希望的"cheese"或者"parrot"的图象,
于是你得到了错误信息:”没听说过一个名为the_image的对象”。
还好,eval能够帮你得到你想要的对象。
function simpleSwap() 
{ 
var the_image = prompt("change parrot or cheese",""); 
var the_image_name = "window.document." + the_image; 
var the_image_object = eval(the_image_name); 
the_image_object.src = "ant.gif"; 
}

如果用户在提示框里填入"parrot",在第二行里创建了一个字符串即window.document.parrot. 然后包含了eval的第三
行意思是: "给我对象window.document.parrot" - 也就是你要的那个图象对象。一旦你获取了这个图象对象,你可以把
它的src属性设为ant.gif. 有点害怕?用不着。其实这相当有用,人们也经常使用它。
我们常常在Javascript中间到Eval这个函数,
有些人觉得这个函数很奇怪,可以把一些字符串变的功能很强大
在我们需要将普通的字符串转变成具体的对象的时候,就会用到这个函数
eval 函数对作为数字表达式的一个字符串进行求值,其语法为:
eval(expr)
此处 expr 是一个被求值的字符串参数。如果该字符串是一个表达式,eval 求该表达式的值;如果该参数代表一个或多个 JavaScript 语句,那么 eval 执行这些语句。eval 函数可以用来把一个日期从一种格式(总是字符串)转换为数值表达式或数字。
==============================
Eval 函数
功能:先解释Javascript代码,然后在执行它
用法:Eval(codeString)
codeString是包含有Javascript语句的字符串,在eval之后使用Javascript引擎编译。
注释:
例子:eval(id + "_icon.src="/imgs/collapse_up.gif'");
id是之前设定的参数,而在双引号中的字符串则是需要编译的
function tophide(id) //id indicates menu 
{ 
if (top.topframeset.rows == "31,*") 
{ 
top.topframeset.rows = "86,*"; 
eval(id + "_icon.src="/imgs/collapse_up.gif'"); 
eval(id + "_icon.alt='Collapse The Head'"); 
head.style.display = "block" 
} 
else 
{ 
top.topframeset.rows = "31,*"; 
eval(id + "_icon.src="/imgs/collapse_down.gif'"); 
eval(id + "_icon.alt='Expand The Head'"); 
head.style.display = "none" 
} 
}

更多可以参考:
javascript eval()用法
Javascript 相关文章推荐
[Web]防止用户复制页面内容和另存页面的方法
Feb 06 Javascript
javascript 得到文件后缀名的思路及实现
May 09 Javascript
jQuery事件绑定与解除绑定实现方法
Apr 15 Javascript
JS给Textarea文本框添加行号的方法
Aug 20 Javascript
JavaScript通过filereader接口读取文件
May 10 Javascript
基于BootStrap的文本编辑器组件Summernote
Oct 27 Javascript
React Native react-navigation 导航使用详解
Dec 01 Javascript
vue项目中引入noVNC远程桌面的方法
Mar 05 Javascript
jQuery简单实现根据日期计算星期几的方法
Jan 09 jQuery
vue实现标签云效果的方法详解
Aug 28 Javascript
layui多iframe页面控制定时器运行的方法
Sep 05 Javascript
VUEX采坑之路之获取不到$store的解决方法
Nov 08 Javascript
JavaScript Eval 函数使用
Mar 23 #Javascript
js本身的局限性 别让javascript做太多事
Mar 23 #Javascript
js parentElement和offsetParent之间的区别
Mar 23 #Javascript
Javascript 变量作用域 两个可能会被忽略的小特性
Mar 23 #Javascript
JavaScript Perfection kill 测试及答案
Mar 23 #Javascript
锋利的jQuery 第三章章节总结的例子
Mar 23 #Javascript
jQuery 核心函数以及jQuery对象
Mar 23 #Javascript
You might like
PHP类中Static方法效率测试代码
2010/10/17 PHP
for循环连续求和、九九乘法表代码
2012/02/20 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
php+flash+jQuery多图片上传源码分享
2020/07/27 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
调用DOM对象的focus使文本框获得焦点
2014/02/19 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
微信小程序 LOL 英雄介绍开发实例
2016/09/30 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
javascript 正则表达式分组、断言详解
2017/04/20 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
使用react实现手机号的数据同步显示功能的示例代码
2018/04/03 Javascript
koa socket即时通讯的示例代码
2018/09/07 Javascript
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
利用React Router4实现的服务端直出渲染(SSR)
2019/01/07 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
ipython和python区别详解
2019/06/26 Python
Python笔记之观察者模式
2019/11/20 Python
如何基于python实现归一化处理
2020/01/20 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
浅析几个CSS3常用功能的写法
2014/06/05 HTML / CSS
HTML5实现视频直播功能思路详解
2017/11/16 HTML / CSS
见习期自我鉴定
2013/11/07 职场文书
红旗方阵解说词
2014/02/12 职场文书
学校对教师的评语
2014/04/28 职场文书
技校毕业生自荐书
2014/05/23 职场文书
法人委托书
2014/07/31 职场文书
单位委托书
2014/10/15 职场文书
2015年招聘工作总结
2014/12/12 职场文书
公司员工宿舍管理制度
2015/08/07 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python