Eval 是Javascript 中一个非常有用而奇特的预定义函
数,在Flash5 的Actionscript 语言里也能见到它的身影。然
而,它的概念和作用也像C 语言中的指针一样较难理解,
因而在实际应用中常常不能运用得当。
函数Eval的功能是把一个字符串参数转换成Javascript
的代码,这个被转换的代码可以是一个变量名,也可以
是一个算术表达式,甚至是一个函数表达式。如i = eval
("name1")是把名为name1 的变量赋值给变量i;i=eval
("3+2")是把表达式3+2 的值5 赋给变量i ; i = eval
("funname(n)")是把函数funname(n)返回值传给变量i。这
时,你也许要问了,这不是多此一举吗?直接写成
i=name1;i=3+2;i=funname(n)不就行了吗?是的,如果
我们仅仅把字符串值当作参数,是一点作用都不起。但如
果我们把字符串变量作为参数,Eval 的作用就大了。如
i=eval(str)(其中,str 是字符串变量),str 作为一个变量,
其值可以动态地发生变更,从而使i = eval(str)产生不同
的结果。这时str是不是像C语言的指针?它“指”向name1
(即str 的值是"name1" 字串),i得到的是变量name1 的值。
它“指”向一个函数名,就调用该函数并返回值给i(但该
函数必须事先定义好,Javascript 引擎要找得到才行)。此
外,它比“指针”更有用的是,还可解析执行动态生成的
运算表达式。下面通过一个Web仿真计算器实例来描述它
的这个作用。
这是一个基于Web的计算器仿真程序。用户可以像操
作一个现实世界中的计算器一样,通过单击按钮输入数据
和运算符号,当输入等号后在文本框中得到最终结果。它
的原理很简单,就是记录用户输入的运算式字串,然后用
Eval 函数把该字串转成运算式交给Javascript 执行即可。
先手动建立一个简单的HTML 文件,只要<html>、
<head>和<body>元素即可。接着在<body></body>间插入以
下html 代码,设置好该程序界面。
<input type="text" name=textdisp value="" ><br>
<input type="button" name=leftk value="(" onclick="yunsuan(value)">
<input type="button" name=rightk value=")" onclick="yunsuan(value)">
<input type="button" name=op1 value="1" onclick="yunsuan(value)">
<input type="button" name=op2 value="2" onclick="yunsuan(value)">
<input type="button" name=op3 value="3" onclick="yunsuan(value)">
<input type="button" name=op4 value="4" onclick="yunsuan(value)">
<br><p>
<input type="button" name=op5 value="5" onclick="yunsuan(value)">
<input type="button" name=op6 value="6" onclick="yunsuan(value)">
<input type="button" name=op7 value="7" onclick="yunsuan(value)">
<input type="button" name=op8 value="8" onclick="yunsuan(value)">
<input type="button" name=op9 value="9" onclick="yunsuan(value)">
<input type="button" name=op0 value="0" onclick="yunsuan(value)">
<br><p>
<input type="button" name=oppoint value="." onclick="yunsuan(value)">
<input type="button" name=opadd value="+" onclick="yunsuan(value)">
<input type="button" name=opsub value="-" onclick="yunsuan(value)">
<input type="button" name=opmul value="*" onclick="yunsuan(value)">
<input type="button" name=opdiv value="/" onclick="yunsuan(value)">
<input type="button" name=opeql value="=" onclick="yunsuan(value)">
<br><p>
<input type="button" name=cle value="restar" onclick="res()">
现在用IE5 打开它,就会得到如图所示的效果。
再接再厉,现在在<head></head>中输入以下Javascript
代码:
<TITLE>test</TITLE>
<script language="javascript">
var expstring="";
var numstring="";
function yunsuan(btn){
if(btn=="=")
textdisp.value=eval(expstring);
else
{if(((btn>="0")&&(btn<="9"))||(btn=="."))
{numstring=numstring+btn;
textdisp.value=numstring;
}
else
numstring="";
expstring=expstring+btn;
}
}
function res(){
expstring="";
textdisp.value="";
numstring="";
}
</script>
这样,我们利用Eval 函数,仅仅十几行代码就做好了
这个计算器。如果你用VB 做同样的工作,呵呵,编译后的
EXE文件足有24kB,我试过。美中不足,本篇没有加入校验
输入运算式是否合法的功能,你如果感兴趣可以自己加上
去,毕竟自己动手尝试才会体会更深。
作者在 2010-04-17 12:54:05 发布以下内容