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 相关文章推荐
Javascript 中文字符串处理额外注意事项
Nov 15 Javascript
用Juery网页选项卡实现代码
Jun 13 Javascript
图标线性回归斜着移动到指定的位置
Aug 16 Javascript
JS实现时间格式化的方式汇总
Oct 16 Javascript
javascript获取web应用根目录的方法
Feb 12 Javascript
js特殊字符过滤的示例代码
Mar 05 Javascript
浅谈Unicode与JavaScript的发展史
Jan 19 Javascript
pace.js页面加载进度条插件
Sep 29 Javascript
jQuery滚动新闻实现代码
Jun 26 Javascript
js实现功能比较全面的全选和多选
Mar 02 Javascript
React-Native 组件之 Modal的使用详解
Aug 08 Javascript
jQuery实现获取及设置CSS样式操作详解
Sep 05 jQuery
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 adodb连接mssql解决乱码问题
2009/06/12 PHP
PHP中文分词的简单实现代码分享
2011/07/17 PHP
使用php get_headers 判断URL是否有效的解决办法
2013/04/27 PHP
php+xml实现在线英文词典查询的方法
2015/01/23 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
2019/02/27 PHP
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
分页栏的web标准实现
2011/11/01 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
2016/05/18 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
原生JS取代一些JQuery方法的简单实现
2016/09/20 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
2016/12/08 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
Django+Vue跨域环境配置详解
2018/07/06 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
2020/10/29 Javascript
python下载图片实现方法(超简单)
2017/07/21 Python
Python3实现的简单验证码识别功能示例
2018/05/02 Python
python实现键盘控制鼠标移动
2020/11/27 Python
Anaconda 查看、创建、管理和使用python环境的方法
2019/12/03 Python
修改Pandas的行或列的名字(重命名)
2019/12/18 Python
Anconda环境下Vscode安装Python的方法详解
2020/03/29 Python
html5桌面通知(Web Notifications)实例解析
2014/07/07 HTML / CSS
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
艺术系应届生的自我评价
2013/10/19 职场文书
班组长安全生产职责
2013/12/16 职场文书
网络信息管理员岗位职责
2014/01/05 职场文书
金融行业职业生涯规划范文
2014/01/17 职场文书
原材料检验岗位职责
2014/03/15 职场文书
学校开学标语
2014/10/06 职场文书
Spring中的@Transactional的工作原理
2022/06/05 Java/Android