Javascript中Eval函数的使用说明


Posted in Javascript onOctober 11, 2008

举个小例子:

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 相关文章推荐
表单提交时自动复制内容到剪贴板的js代码
Mar 16 Javascript
jquery.artwl.thickbox.js  一个非常简单好用的jQuery弹出层插件
Mar 01 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
Mar 12 Javascript
jQuery插件bxSlider实现响应式焦点图
Apr 12 Javascript
浅析JavaScript作用域链、执行上下文与闭包
Feb 01 Javascript
React.js入门学习第一篇
Mar 30 Javascript
js接收并转化Java中的数组对象的方法
Aug 11 Javascript
jQuery插件Echarts实现的渐变色柱状图
Mar 23 jQuery
jquery中封装函数传递当前元素的方法示例
May 05 jQuery
关于页面刷新vuex数据消失问题解决方案
Jul 03 Javascript
关于JavaScript数组去重的一些理解汇总
Sep 10 Javascript
利用JS判断元素是否为数组的方法示例
Jan 08 Javascript
JavaScript更改class和id的方法
Oct 10 #Javascript
ppk谈JavaScript style属性
Oct 10 #Javascript
用javascript getComputedStyle获取和设置style的原理
Oct 10 #Javascript
执行iframe中的javascript方法
Oct 07 #Javascript
JS版网站风格切换实例代码
Oct 06 #Javascript
判断JavaScript对象是否可用的最正确方法分析
Oct 03 #Javascript
IE与firefox之jquery用法区别
Oct 03 #Javascript
You might like
PHP批量采集下载美女图片的实现代码
2013/06/03 PHP
php循环创建目录示例分享(php创建多级目录)
2014/03/04 PHP
yii用户注册表单验证实例
2015/12/26 PHP
PHP使用数组依次替换字符串中匹配项
2016/01/08 PHP
深入理解PHP中的count函数
2016/05/31 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/01/13 Javascript
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
js使用for循环及if语句判断多个一样的name
2014/09/09 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
如何动态加载外部Javascript文件
2015/12/02 Javascript
JS中使用FormData上传文件、图片的方法
2016/08/07 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
2017/03/15 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
jQuery中库的引用方法
2018/01/06 jQuery
微信小程序封装多张图片上传api代码实例
2019/12/30 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
[01:00:04]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第二局
2016/02/26 DOTA
[01:33]PWL开团时刻DAY2-开雾与反开雾
2020/10/31 DOTA
python爬虫爬取网页表格数据
2018/03/07 Python
python pyheatmap包绘制热力图
2018/11/09 Python
浅谈python中真正关闭socket的方法
2018/12/18 Python
python实现Flappy Bird源码
2018/12/24 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
2019/08/27 Python
TFRecord文件查看包含的所有Features代码
2020/02/17 Python
django rest framework serializers序列化实例
2020/05/13 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
2020/06/27 Python
Java中实现多态的机制是什么?
2014/12/07 面试题
大学校庆邀请函
2014/01/11 职场文书
大学校务公开实施方案
2014/03/31 职场文书
中学生运动会新闻稿
2014/09/24 职场文书
2015年全国保险公众宣传日活动方案
2015/05/06 职场文书
2016大学迎新晚会开场白
2015/11/24 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书