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 相关文章推荐
jQuery中:first选择器用法实例
Dec 30 Javascript
jQuery中:image选择器用法实例
Jan 03 Javascript
微信小程序 基础组件与导航组件详细介绍
Feb 21 Javascript
jQuery Masonry瀑布流布局神器使用详解
May 25 jQuery
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
Jan 31 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
Aug 09 Javascript
JavaScript中join()、splice()、slice()和split()函数用法示例
Aug 24 Javascript
cnpm加速Angular项目创建的方法
Sep 07 Javascript
jQuery实现的自定义轮播图功能详解
Dec 28 jQuery
vue-cli history模式实现tomcat部署报404的解决方式
Sep 06 Javascript
ES6函数和数组用法实例分析
May 23 Javascript
原生javascript如何实现共享onload事件
Jul 03 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多线程抓取网页实现代码
2010/07/22 PHP
Yii PHP Framework实用入门教程(详细介绍)
2013/06/18 PHP
关于file_get_contents返回为空或函数不可用的解决方案
2013/06/24 PHP
PHP 信号管理知识整理汇总
2017/02/19 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
jquery中对表单的基本操作代码
2010/07/29 Javascript
jquery动画1.加载指示器
2012/08/24 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
JavaScript中switch判断容易犯错的一个细节
2014/08/27 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
2015/08/21 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
Javascript删除指定元素节点的方法
2016/06/21 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
详解webpack babel的配置
2018/01/09 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
JavaScript中的类型检查
2020/02/03 Javascript
vue使用axios实现excel文件下载的功能
2020/07/16 Javascript
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
Python实现好友全头像的拼接实例(推荐)
2017/06/24 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
P/Invoke是什么
2015/07/31 面试题
广告学专业毕业生自荐信
2013/09/24 职场文书
英文演讲稿开场白
2014/08/25 职场文书
弘扬焦裕禄精神走群众路线思想汇报
2014/09/12 职场文书
就业证明函
2015/06/17 职场文书
win11如何查看端口是否被占用? Win11查看端口是否占用的技巧
2022/04/05 数码科技
Grafana可视化监控系统结合SpringBoot使用
2022/04/19 Redis
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL