Javascript中eval函数的使用方法与示例


Posted in Javascript onApril 09, 2007

定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

语法 eval(string) 参数 描述 string 必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。 返回值 通过计算 string 得到的值(如果有的话)。

说明 该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。

如果试图覆盖 eval 属性或把 eval() 方法赋予另一个属性,并通过该属性调用它,则 ECMAScript 实现允许抛出一个 EvalError 异常。

抛出 如果参数中没有合法的表达式和语句,则抛出 SyntaxError 异常。

如果非法调用 eval(),则抛出 EvalError 异常。

如果传递给 eval() 的 Javascript 代码生成了一个异常,eval() 将把该异常传递给调用者。

提示和注释 提示:虽然 eval() 的功能非常强大,但在实际使用中用到它的情况并不多。

下面为大家分享一个常用的小例子:

<SCRIPT language="javascript">
function showsubmenu(sid)
{
whichEl = eval("submenu" + sid);
if (whichEl.style.display == "none")
{
eval("submenu" + sid + ".style.display=\"\";");
}
else
{
eval("submenu" + sid + ".style.display=\"none\";");
}
}
</SCRIPT>

Eval 函数

功能:先解释Javascript代码,然后在执行它

用法:Eval(codeString)

codeString是包含有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 相关文章推荐
javascript XML数据显示为HTML一例
Dec 23 Javascript
jquery 按钮状态效果 正常、移上、按下
Aug 12 Javascript
JavaScript中的连字符详解
Nov 28 Javascript
JavaScript中原型链存在的问题解析
Sep 25 Javascript
详解vue.js 开发环境搭建最简单攻略
Jun 12 Javascript
extjs简介_动力节点Java学院整理
Jul 17 Javascript
对vue里函数的调用顺序介绍
Mar 17 Javascript
浅谈node.js 命令行工具(cli)
May 10 Javascript
vue: WebStorm设置快速编译运行的方法
Oct 18 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
Feb 28 Javascript
解决vuecli3中img src 的引入问题
Aug 04 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
Sep 12 Javascript
给网站上的广告“加速”显示的方法
Apr 08 #Javascript
超级简单的图片防盗(HTML),好用
Apr 08 #Javascript
filemanage功能中用到的lib.js
Apr 08 #Javascript
filemanage功能中用到的common.js
Apr 08 #Javascript
收集的网上用的ajax之chat.js文件
Apr 08 #Javascript
在页面上点击任一链接时触发一个事件的代码
Apr 07 #Javascript
js检测客户端不是firefox则提示下载
Apr 07 #Javascript
You might like
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
PHP实现懒加载的方法
2015/03/07 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
php intval函数用法总结
2019/04/14 PHP
php实现的顺序线性表示例
2019/05/04 PHP
JavaScript 自动完成脚本整理(33个)
2009/10/20 Javascript
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
2017/03/28 jQuery
通过命令行生成vue项目框架的方法
2017/07/12 Javascript
Vue实现购物车场景下的应用
2017/11/27 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
JavaScript实现像雪花一样的Hexaflake分形
2020/07/07 Javascript
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
python 使用socket传输图片视频等文件的实现方式
2019/08/07 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
深入浅析python 中的self和cls的区别
2020/06/20 Python
PyTorch实现重写/改写Dataset并载入Dataloader
2020/07/14 Python
python 删除系统中的文件(按时间,大小,扩展名)
2020/11/19 Python
用60行代码实现Python自动抢微信红包
2021/02/04 Python
日本网路线上商品代购服务:转送JAPAN
2016/08/05 全球购物
英国第一家领先的在线处方眼镜零售商:Glasses Direct
2018/02/23 全球购物
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
商务日语专业毕业生求职信
2013/10/26 职场文书
失业者真诚求职信范文
2013/12/25 职场文书
新郎婚宴答谢词
2014/01/19 职场文书
《骑牛比赛》教后反思
2014/04/22 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
2015年社区居委会工作总结
2015/05/18 职场文书
2016年“5.12”国际护士节活动总结
2016/04/06 职场文书
新店开业策划方案怎么书写?
2019/07/05 职场文书