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 相关文章推荐
网页常用特效代码整理
Jun 23 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
Dec 06 Javascript
jquery多选项卡效果实例代码(附效果图)
Mar 23 Javascript
Visual Studio中js调试的方法图解
Jun 30 Javascript
推荐8款jQuery轻量级树形Tree插件
Nov 12 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
Mar 12 Javascript
JS+CSS实现电子商务网站导航模板效果代码
Sep 10 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
May 21 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
May 08 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
Sep 27 Javascript
Vue.js的复用组件开发流程完整记录
Nov 29 Javascript
微信小程序解除10个请求并发限制
Dec 18 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
3.从实例开始
2006/10/09 PHP
使用PHP socke 向指定页面提交数据
2008/07/23 PHP
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
capacityFixed 基于jquery的类似于新浪微博新消息提示的定位框
2011/05/24 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
Vue数据驱动模拟实现5
2017/01/13 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
浅析从vue源码看观察者模式
2018/01/29 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
python实现简单温度转换的方法
2015/03/13 Python
在python中将字符串转为json对象并取值的方法
2018/12/31 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
python读取Excel表格文件的方法
2019/09/02 Python
Python面向对象编程基础实例分析
2020/01/17 Python
python如何求数组连续最大和的示例代码
2020/02/04 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
Python pip使用超时问题解决方案
2020/08/03 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
CSS3教程(9):设置RGB颜色
2009/04/02 HTML / CSS
Weekendesk意大利:探索多种引人入胜的周末主题
2016/10/14 全球购物
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
介绍一下Java中的Class类
2015/04/10 面试题
应届生简历中的自我评价
2014/01/13 职场文书
小学英语课后反思
2014/04/26 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
2014光棍节单身联谊活动策划书
2014/10/10 职场文书
写给同事的离职感言
2015/08/04 职场文书
班主任班级管理心得体会
2016/01/07 职场文书
话题作文之生命的旋律
2019/12/17 职场文书
用python基于appium模块开发一个自动收取能量的小助手
2021/09/25 Python
SQL Server远程连接的设置步骤(图文)
2022/03/23 SQL Server
JavaScript前端面试组合函数
2022/06/21 Javascript
使用python生成大量数据写入es数据库并查询操作(2)
2022/09/23 Python