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 相关文章推荐
(function($){...})(jQuery)的意思
Jul 22 Javascript
jQuery在vs2008及js文件中的无智能提示的解决方法
Dec 30 Javascript
神奇的7个jQuery 3D插件整理
Jan 06 Javascript
AngularJS语法详解
Jan 23 Javascript
javascript实现简单的省市区三级联动
May 14 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
Jan 08 Javascript
前端开发之CSS原理详解
Mar 11 Javascript
常用的几个JQuery代码片段
Mar 13 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
Jul 05 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
Jun 20 Javascript
JS实现的对象去重功能示例
Jun 04 Javascript
JavaScript 接口原理与用法实例详解
May 12 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
用文本文件制作留言板提示(上)
2006/10/09 PHP
php stream_get_meta_data返回值
2013/09/29 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
添加到收藏夹代码(兼容几乎所有的浏览器)
2007/01/09 Javascript
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
浅析javascript中的DOM
2015/03/01 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
2016/12/19 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
收藏整理的一些Python常用方法和技巧
2015/05/18 Python
Python读取指定目录下指定后缀文件并保存为docx
2017/04/23 Python
浅谈python numpy中nonzero()的用法
2018/04/02 Python
sublime python3 输入换行不结束的方法
2018/04/19 Python
Python Django 实现简单注册功能过程详解
2019/07/29 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
2014/02/10 HTML / CSS
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
HTML5学习笔记之html5与传统html区别
2016/01/06 HTML / CSS
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
实习护理工作自我评价
2013/09/25 职场文书
体育教师工作总结的自我评价
2013/10/10 职场文书
幼儿园实习生辞职信
2014/01/20 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
社区三八妇女节活动总结
2015/02/06 职场文书
MySQL GRANT用户授权的实现
2021/06/18 MySQL
js作用域及作用域链工作引擎
2022/07/07 Javascript