J2EE社區

          茍有恒,何必三更起五更眠;
          最無益,只怕一日曝十日寒.
          posts - 241, comments - 318, trackbacks - 0, articles - 16

          在Javascript中Eval函數的使用

          Posted on 2008-11-01 16:16 xcp 閱讀(5576) 評論(4)  編輯  收藏 所屬分類: Javascript
           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"
              } 
          }




          名稱: ?4C.ESL | .↗Evon
          口號: 遇到新問題?先要尋找一個方案乄而不是創造一個方案こ
          mail: 聯系我


          Feedback

          # re: 在Javascript中Eval函數的使用   回復  更多評論   

          2008-11-01 16:51 by 金山毒霸2008
          eval 函數其實就是對數字表達式的一個字符串進行求值

          # re: 在Javascript中Eval函數的使用   回復  更多評論   

          2008-11-01 17:01 by xcp
          @金山毒霸2008

          eval 函數其實就是對數字表達式的一個字符串進行求值,

          其實它還有很多作用的,關鍵是要用得巧...

          # re: 在Javascript中Eval函數的使用   回復  更多評論   

          2009-04-03 10:49 by 陌生人

          讓我說你什么好呢??

          都是抄襲的。。

          這讓我替你干到悲哀。。。。

          十分 的悲哀......

          # re: 在Javascript中Eval函數的使用   回復  更多評論   

          2010-01-12 21:57 by zqq
          ...
          主站蜘蛛池模板: 古蔺县| 西藏| 沈丘县| 林州市| 大洼县| 武平县| 六盘水市| 元氏县| 乐清市| 姜堰市| 西乌珠穆沁旗| 罗源县| 永泰县| 新巴尔虎左旗| 东莞市| 临清市| 吉安市| 张家川| 梁河县| 奉新县| 兰坪| 柳江县| 枣强县| 博兴县| 昌平区| 郁南县| 河间市| 自贡市| 普陀区| 隆回县| 栾城县| 东港市| 新泰市| 仲巴县| 云林县| 聂拉木县| 广西| 渭南市| 永靖县| 雷波县| 广东省|