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 相关文章推荐
基于jquery1.4.2的仿flash超炫焦点图播放效果
Apr 20 Javascript
js实现日历可获得指定日期周数及星期几示例分享(js获取星期几)
Mar 14 Javascript
js弹出对话框方式小结
Nov 17 Javascript
基于jQuery实现音乐播放试听列表
Apr 14 Javascript
最棒的Angular2表格控件
Aug 10 Javascript
JS实现全屏的四种写法
Dec 30 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
Dec 14 Javascript
vue组件间通信六种方式(总结篇)
May 15 Javascript
js设置鼠标悬停改变背景色实现详解
Jun 26 Javascript
微信小程序实现手势滑动效果
Aug 26 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
Dec 29 Javascript
vue如何清除浏览器历史栈
May 25 Vue.js
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版(2)
2006/10/09 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
thinkPHP中_initialize方法实例分析
2016/12/05 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
jQuery chili图片远处放大插件
2009/11/30 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
javascript中常用编程知识
2013/04/08 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
vue-dialog的弹出层组件
2020/05/25 Javascript
jQuery实现的简单动态添加、删除表格功能示例
2017/09/21 jQuery
Javascript类型判断相关例题及解析
2020/08/26 Javascript
[46:00]Ti4 冒泡赛第二轮LGD vs C9 2
2014/07/14 DOTA
举例讲解Django中数据模型访问外键值的方法
2015/07/21 Python
Java多线程编程中ThreadLocal类的用法及深入
2016/06/21 Python
解决pyttsx3无法封装的问题
2018/12/24 Python
python-numpy-指数分布实例详解
2019/12/07 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
cookies应对python反爬虫知识点详解
2020/11/25 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
J2EE相关知识面试题
2013/08/26 面试题
2014升学宴答谢词
2014/01/26 职场文书
电气自动化个人求职信范文
2014/02/03 职场文书
活动总结怎么写啊
2014/05/07 职场文书
2014年库房工作总结
2014/11/26 职场文书
销售经理岗位职责
2015/01/31 职场文书
企业投资意向书
2015/05/09 职场文书
《七月的天山》教学反思
2016/02/19 职场文书
创业计划书之养殖业
2019/10/11 职场文书
python识别围棋定位棋盘位置
2021/07/26 Python
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle
「睡美人」爱洛公主粘土人开订
2022/03/22 日漫
python playwright之元素定位示例详解
2022/07/23 Python