亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Ajax中eval的使用詳解

原創(chuàng) 2016-11-12 15:11:19 477
摘要:定義和用法  Eval它是用來(lái)計(jì)算某個(gè)字符串,并且執(zhí)行其中的JavaScript代碼。  語(yǔ)法  1) eval函數(shù)接受一個(gè)string這個(gè)參數(shù),并且這個(gè)參數(shù)是必須的,這個(gè)參數(shù)就是要計(jì)算的這個(gè)字符串。它里面可以函數(shù)含有JavaScript的表達(dá)式,或者要執(zhí)行的語(yǔ)句?! val(string)。  2) 那,這個(gè)既然是函數(shù),就有可能有返回值。它的返回值是:如果這個(gè)string參數(shù)有返回值

定義和用法

  Eval它是用來(lái)計(jì)算某個(gè)字符串,并且執(zhí)行其中的JavaScript代碼。

  語(yǔ)法

  1) eval函數(shù)接受一個(gè)string這個(gè)參數(shù),并且這個(gè)參數(shù)是必須的,這個(gè)參數(shù)就是要計(jì)算的這個(gè)字符串。它里面可以函數(shù)含有JavaScript的表達(dá)式,或者要執(zhí)行的語(yǔ)句。

  eval(string)。

  2) 那,這個(gè)既然是函數(shù),就有可能有返回值。它的返回值是:如果這個(gè)string參數(shù)有返回值的話,那這個(gè)函數(shù)就原樣返回這個(gè)string執(zhí)行完畢的結(jié)果。

  3) 有一個(gè)地方值得注意,這個(gè)eval函數(shù)只接受原始的字符串作為參數(shù)。如果string參數(shù)不是原始字符串,那該方法將不做任何改變的返回。因此,我們不要為這個(gè)函數(shù)傳遞一些string對(duì)象來(lái)作為參數(shù)。并且,如果我們?cè)噲D覆蓋eval這個(gè)屬性,把eval函數(shù)賦值給另外一個(gè)屬性,有可能會(huì)拋出一些異常。

  4) 并且,如果這個(gè)參數(shù)中沒(méi)有合法的表達(dá)式或者語(yǔ)句,有可能會(huì)拋出語(yǔ)法錯(cuò)誤的異常。

  可以看到,我們的eval函數(shù),功能非常強(qiáng)大。所以,我們?cè)趯?shí)際應(yīng)用中應(yīng)該要更加注意它的合法性、合理性。

  查看示例

  1. 看這一行示例

 eval("x=10;y=20;document.write(x*y)");

  我在里面給它傳遞進(jìn)入了一些執(zhí)行語(yǔ)句。

  1) 我先賦值x=10,然后y=20。

  2) 然后我再給x和y做一個(gè)乘法。

  再把它們的結(jié)果輸出來(lái)。

  那我們的eval函數(shù)會(huì)把這3條語(yǔ)句作為參數(shù),用來(lái)執(zhí)行。

  我們看一下執(zhí)行結(jié)果,刷新瀏覽器。

1.png

  看到了我們的x * y,也就是10 * 20,確實(shí)等于200。

  這是我們的多條表達(dá)式語(yǔ)句。

  2. 看另外一個(gè)例子:document.write(eval("2+2"));

  1) 里面我們直接執(zhí)行2+2,那么它執(zhí)行的結(jié)果應(yīng)該是4。

  2) 那么這eval函數(shù)返回這個(gè)4給document.write的輸出,那應(yīng)該輸出為4。

  刷新瀏覽器,確實(shí)也得到了為4 的結(jié)果。

2.png

  3. 再做一個(gè)簡(jiǎn)單的示例

  1) 例如我定義一個(gè)這樣的x變量。

  var x = 10;

  2) 然后我輸出它在里面用變量做一個(gè)計(jì)算。

  document.write(eval(x+7));

  3) 我們看它是不是返回我們想要的結(jié)果,應(yīng)該是返回17,刷新瀏覽器。

3.png

  其實(shí),它就是在這里x為10,10 加 7等于17,然后eval執(zhí)行完只有返回17,由document.write打印在頁(yè)面上。

  這是我們?cè)谧址碌膃val函數(shù)的使用

  在其它情況下的應(yīng)用

  它的返回結(jié)果是怎么樣的?

  1.辟如,這個(gè):eval("2+3");

  我們是直接傳了一個(gè)2 + 3在里面,它應(yīng)該會(huì)執(zhí)行,執(zhí)行完了之后它就會(huì)被返回5。

  但是我們這里沒(méi)有做任何的輸出,所以我們應(yīng)該是看不到這個(gè)效果的,它是它仍然是會(huì)正常執(zhí)行的。

  2. 那我們把這個(gè)eval函數(shù)賦值給這個(gè)變量:

  var myeval = eval;

  這個(gè)有可能會(huì)拋出來(lái)異常,所以我們?cè)趯?shí)際項(xiàng)目中,不建議這么使用。雖然我們?cè)谟行g覽器里面可能不會(huì)拋出異常。

  1) 刷新瀏覽器:

4.png

   它是執(zhí)行了下面的代碼:

  var x = 10;
  document.write(eval(x+7));
  eval("2+3");
  var myeval = eval;
  try {
  alert("Result:" + eval(prompt("Enter an expression", "")));
  } catch(e) {
  alert(e);
  }

  2) 我們這個(gè)刷新,它并沒(méi)有拋出異常,所以它在Chrome瀏覽器里面應(yīng)該是可以正常執(zhí)行的。

  3) 我們看一下這段代碼,這是用來(lái)檢測(cè)這個(gè)eval參數(shù)是否合法的。

  try {

  alert("Result:" + eval(prompt("Enter an expression", "")));

  } catch(e) {

  alert(e);

  }

  a) 首先使用 try catch 包裹起來(lái)。

  b) 然后執(zhí)行了一個(gè)alert函數(shù),alert函數(shù)里面是Result這個(gè)字符串 + eval函數(shù)的返回值。

  c) eval里面執(zhí)行了,彈出一個(gè)彈框,就是一個(gè)交互的對(duì)話框,供用戶輸入一個(gè)表達(dá)式。

  然后作為執(zhí)行結(jié)果再返回。

  刷新瀏覽器,這個(gè)彈出框是通過(guò)eval函數(shù)來(lái)執(zhí)行的,執(zhí)行的時(shí)候,它提示輸入一個(gè)表達(dá)式。

5.png

  例如我輸入2+3,那eval函數(shù)執(zhí)行這個(gè)2+3之后,應(yīng)該會(huì)返回5,返回5之后,跟Resul這個(gè)字符串相接,然后傳遞給alert函數(shù),所以會(huì)彈出來(lái)一個(gè)5。

6.png

  這就是eval函數(shù)在一些其它情況下的使用。

  eval函數(shù)是如何解析JSON格式字符串的

  1. 什么是Json格式的字符串呢?

  Json是一種輕量級(jí)的數(shù)據(jù)交換格式,易于閱讀和編寫,同時(shí)也易于機(jī)器生成、解析。

  2. 下面,我寫一個(gè)json格式的字符串。

  1) Json字符串外面是一個(gè)大括號(hào)。

  2) 里面就是類似于我們的字典一樣的。

7.png

  3. 我們利用JavaScript內(nèi)置的eval函數(shù),將JSON格式的字符串轉(zhuǎn)換成json對(duì)象時(shí),我們?cè)趺床僮鳎?/strong>

  1) 我們需要用一個(gè)小括號(hào),先將這個(gè)字符串包住。

  2) 例如上面的這個(gè)字符串,我給它賦值一個(gè)txt這樣的一個(gè)變量。

8.png

  賦值變量的時(shí)候,我們需要用括號(hào)給它括起來(lái)。

  外面用雙引號(hào)的時(shí)候,里面就要用單引號(hào)。

  var txt = "{'userid':11,'name':'liyi'}";

  3) 然后再解析,它會(huì)把這個(gè)字符串解析成json的對(duì)象。

  然后通過(guò)我們的eval函數(shù),在里面加一對(duì)小括號(hào)。

  然后把這個(gè)字符串連接起來(lái)。

  var txtObj = eval("("+txt+")");

  4) 這個(gè)時(shí)候,我們就把解析之后的對(duì)象的userid做一次輸出。

  document.write(txtObj.userid);

  刷新瀏覽器,它就將我們的json字符串解析成了一個(gè)json的對(duì)象。

9.png

  通過(guò)這個(gè)對(duì)象的.,輸出了它的一個(gè)屬性。Userid為11。這就是我們想要的正確的結(jié)果。


發(fā)布手記

熱門詞條