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 相关文章推荐
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
Jun 11 Javascript
Jquery操作js数组及对象示例代码
May 11 Javascript
简单的jQuery入门指引
Jul 28 Javascript
js采用concat和sort将N个数组拼接起来的方法
Jan 21 Javascript
JS实现图片放大缩小的方法
Feb 15 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
Apr 24 Javascript
jQuery自定义多选下拉框效果
Jun 19 jQuery
微信小程序页面间传值与页面取值操作实例分析
Apr 30 Javascript
layer.open的自适应及居中及子页面标题的修改方法
Sep 05 Javascript
TypeScript高级用法的知识点汇总
Dec 17 Javascript
JavaScript实现随机点名小程序
Oct 29 Javascript
如何在vue-cli中使用css-loader实现css module
Jan 07 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数组键值用法实例分析
2015/02/27 PHP
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
Iframe实现跨浏览器自适应高度解决方法
2014/09/02 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
2020/06/29 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
使用JS判断移动端手机横竖屏状态
2018/07/30 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
2018/09/13 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
jquery简易手风琴插件的封装
2020/10/13 jQuery
[42:06]2019国际邀请赛全明星赛 8.23
2019/09/05 DOTA
python使用urllib2模块获取gravatar头像实例
2013/12/18 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
Python3.6笔记之将程序运行结果输出到文件的方法
2018/04/22 Python
浅析Python装饰器以及装饰器模式
2018/05/28 Python
浅谈django rest jwt vue 跨域问题
2018/10/26 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
Python常见数据类型转换操作示例
2019/05/08 Python
ORM Django 终端打印 SQL 语句实现解析
2019/08/09 Python
浅谈HTML5新增及移除的元素
2016/06/27 HTML / CSS
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
美国值得信赖的婚恋交友网站:eHarmony
2018/10/04 全球购物
职务说明书范文
2014/05/07 职场文书
公司委托书格式
2014/08/01 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
小学中队活动总结
2015/05/11 职场文书
赤壁观后感(2)
2015/06/15 职场文书
mysql升级到5.7时,wordpress导数据报错1067的问题
2021/05/27 MySQL
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python