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 相关文章推荐
Mootools 1.2教程 输入过滤第一部分(数字)
Sep 15 Javascript
jquery checkbox全选、取消全选实现代码
Mar 05 Javascript
解析JavaScript中点号“.”的多义性
Dec 02 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
Oct 29 Javascript
js实现超简单的展开、折叠目录代码
Aug 28 Javascript
浅析Javascript ES6新增值比较函数Object.is
Aug 24 Javascript
深入探讨Vue.js组件和组件通信
Sep 12 Javascript
Javascript es7中比较实用的两个方法示例
Jul 21 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
Nov 08 Javascript
JS实现提示效果弹出及延迟隐藏的功能
Aug 26 Javascript
jQuery Datatables 动态列+跨列合并实现代码
Jan 30 jQuery
google广告之另类js调用实现代码
Aug 22 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中的实现trim函数代码
2007/03/19 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
PHP队列用法实例
2014/11/05 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
2015/08/23 PHP
PHP pear安装配置教程
2016/05/14 PHP
豆瓣网的jquery代码实例
2008/06/15 Javascript
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
js相册效果代码(点击创建即可)
2013/04/16 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
css如何让浮动元素水平居中
2015/08/07 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
简述Angular 5 快速入门
2017/11/04 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
2018/07/30 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
用Javascript实现发送短信验证码间隔功能
2021/02/08 Javascript
[26:40]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第一局
2016/02/25 DOTA
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
python轻松查到删除自己的微信好友
2016/01/10 Python
Python面向对象之继承和组合用法实例分析
2018/08/27 Python
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
Pycharm连接远程服务器并实现远程调试的实现
2019/08/02 Python
python同时遍历两个list用法说明
2020/05/02 Python
解决Python安装cryptography报错问题
2020/09/03 Python
巴西在线鞋店:Shoestock
2017/10/28 全球购物
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
优秀毕业生求职信
2014/06/05 职场文书
关于运动会的口号
2014/06/07 职场文书
校车安全管理责任书
2015/05/11 职场文书
获奖感言范文
2015/07/31 职场文书
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技