斷點(diǎn)

          每天進(jìn)步一點(diǎn)點(diǎn)!
          posts - 174, comments - 56, trackbacks - 0, articles - 21

          Eval用法

          Posted on 2010-03-09 23:24 斷點(diǎn) 閱讀(718) 評(píng)論(0)  編輯  收藏 所屬分類: JScript

                  Eval 是Javascript 中一個(gè)非常有用而奇特的預(yù)定義函數(shù),它的概念和作用也像C 語言中的指針一樣較難理解,因而在實(shí)際應(yīng)用中常常不能運(yùn)用得當(dāng)。函數(shù)Eval的功能是把一個(gè)字符串參數(shù)轉(zhuǎn)換成Javascript的代碼,這個(gè)被轉(zhuǎn)換的代碼可以是一個(gè)變量名,也可以是一個(gè)算術(shù)表達(dá)式,甚至是一個(gè)函數(shù)表達(dá)式。如i = eval("name1")是把名為name1 的變量賦值給變量i;i=eval("3+2")是把表達(dá)式3+2 的值5 賦給變量i ; i = eval("funname(n)")是把函數(shù)funname(n)返回值傳給變量i。這時(shí),你也許要問了,這不是多此一舉嗎?直接寫成i=name1;i=3+2;i=funname(n)不就行了嗎?是的,如果我們僅僅把字符串值當(dāng)作參數(shù),是一點(diǎn)作用都不起。但如果我們把字符串變量作為參數(shù),Eval 的作用就大了。如i=eval(str)(其中,str 是字符串變量),str 作為一個(gè)變量,其值可以動(dòng)態(tài)地發(fā)生變更,從而使i = eval(str)產(chǎn)生不同的結(jié)果。這時(shí)str是不是像C語言的指針?它“指”向name1(即str 的值是"name1" 字串),i得到的是變量name1 的值。它“指”向一個(gè)函數(shù)名,就調(diào)用該函數(shù)并返回值給i(但該函數(shù)必須事先定義好,Javascript 引擎要找得到才行)。此外,它比“指針”更有用的是,還可解析執(zhí)行動(dòng)態(tài)生成的運(yùn)算表達(dá)式。
                  
                  下面通過一個(gè)Web仿真計(jì)算器實(shí)例來描述它的這個(gè)作用。這是一個(gè)基于Web的計(jì)算器仿真程序。用戶可以像操作一個(gè)現(xiàn)實(shí)世界中的計(jì)算器一樣,通過單擊按鈕輸入數(shù)據(jù)和運(yùn)算符號(hào),當(dāng)輸入等號(hào)后在文本框中得到最終結(jié)果。它的原理很簡(jiǎn)單,就是記錄用戶輸入的運(yùn)算式字串,然后用Eval 函數(shù)把該字串轉(zhuǎn)成運(yùn)算式交給Javascript 執(zhí)行即可。先手動(dòng)建立一個(gè)簡(jiǎn)單的HTML 文件,只要<html>、head>和<body>元素即可。接著在<body></body>間插入以下html 代碼,設(shè)置好該程序界面。
          <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()">
          現(xiàn)在用IE6 打開它,就會(huì)得到如圖所示的效果。再接再厲,現(xiàn)在在<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 函數(shù),僅僅十幾行代碼就做好了這個(gè)計(jì)算器。

          轉(zhuǎn)載:http://school.cfan.com.cn/pro/pother/2006-08-28/1156732532d14455.shtml
          主站蜘蛛池模板: 大竹县| SHOW| 台北县| 开化县| 泸西县| 伊春市| 巍山| 陆川县| 瑞丽市| 方正县| 凤阳县| 南部县| 和田县| 黔南| 白银市| 正蓝旗| 特克斯县| 忻州市| 库尔勒市| 顺义区| 永胜县| 遂溪县| 多伦县| 清水县| 嘉祥县| 方山县| 渭源县| 汤阴县| 江达县| 饶河县| 钟山县| 佛教| 广饶县| 长顺县| 大厂| 绍兴县| 山西省| 太仓市| 东平县| 红安县| 丽江市|