Ajax中的eval函數的用法


eval的定義和使用:

Eval它是用來計算某個字符串,並且執行其中的JavaScript代碼。

語法:

1) eval函數接受一個string這個參數,並且這個參數是必須的,這個參數就是要計算的這個字符串。它里面可以函數含有JavaScript的表達式,或者要執行的語句。

eval(string)。

 

2) 那,這個既然是函數,就有可能有返回值。它的返回值是:如果這個string參數有返回值的話,那這個函數就原樣返回這個string執行完畢的結果。

 

3) 有一個地方值得注意,這個eval函數只接受原始的字符串作為參數。如果string參數不是原始字符串,那該方法將不做任何改變的返回。因此,我們不要為這個函數傳遞一些string對象來作為參數。並且,如果我們試圖覆蓋eval這個屬性,把eval函數賦值給另外一個屬性,有可能會拋出一些異常。

 

4) 並且,如果這個參數中沒有合法的表達式或者語句,有可能會拋出語法錯誤的異常。

 

可以看到,我們的eval函數,功能非常強大。所以,我們在實際應用中應該要更加注意它的合法性、合理性

實例:

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

我在里面給它傳遞進入了一些執行語句。

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

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

再把它們的結果輸出來。

 

那我們的eval函數會把這3條語句作為參數,用來執行。

輸出200

看到了我們的x * y,也就是10 * 20,確實等於200。

這是我們的多條表達式語句。

 

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

 

1) 里面我們直接執行2+2,那么它執行的結果應該是4。

2) 那么這eval函數返回這個4給document.write的輸出,那應該輸出為4。

刷新瀏覽器,確實也得到了為4 的結果。

3. 再做一個簡單的示例

 

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

var x = 10;

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

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

3) 我們看它是不是返回我們想要的結果,應該是返回17,

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

 

這是我們在字符串下的eval函數的使用

 

在其它情況下的應用

 

它的返回結果是怎么樣的?

 

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

 

我們是直接傳了一個2 + 3在里面,它應該會執行,執行完了之后它就會被返回5。

但是我們這里沒有做任何的輸出,所以我們應該是看不到這個效果的,它是它仍然是會正常執行的。

 

2. 那我們把這個eval函數賦值給這個變量

 

var myeval = eval;

這個有可能會拋出來異常,所以我們在實際項目中,不建議這么使用。雖然我們在有些瀏覽器里面可能不會拋出異常。

它是執行了下面的代碼:

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) 我們這個刷新,它並沒有拋出異常,所以它在Chrome瀏覽器里面應該是可以正常執行的。

3) 我們看一下這段代碼,這是用來檢測這個eval參數是否合法的。

try {

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

} catch(e) {

    alert(e);    

}

a) 首先使用 try catch 包裹起來。

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

c) eval里面執行了,彈出一個彈框,就是一個交互的對話框,供用戶輸入一個表達式。

然后作為執行結果再返回。

例如我輸入2+3,那eval函數執行這個2+3之后,應該會返回5,返回5之后,跟Resul這個字符串相接,然后傳遞給alert函數,所以會彈出來一個5。

 

 

eval函數是如何解析JSON格式字符串的

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


Json是一種輕量級的數據交換格式,易於閱讀和編寫,同時也易於機器生成、解析。

 

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

{“userid”:11,‘name’:‘sunliyuan’}

 1) Json字符串外面是一個大括號。

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

 

3. 我們利用JavaScript內置的eval函數,將JSON格式的字符串轉換成json對象時,我們怎么操作?

 

1) 我們需要用一個小括號,先將這個字符串包住。

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

var txt={“userid”:11,‘name’:‘sunliyuan’}

  

賦值變量的時候,我們需要用括號給它括起來。

外面用雙引號的時候,里面就要用單引號。

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

  

3) 然后再解析,它會把這個字符串解析成json的對象。

然后通過我們的eval函數,在里面加一對小括號。

然后把這個字符串連接起來。

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

  

4) 這個時候,我們就把解析之后的對象的userid做一次輸出。

document.write(txtObj.userid);

 

刷新瀏覽器,它就將我們的json字符串解析成了一個json的對象。  輸出11

 

通過這個對象的.,輸出了它的一個屬性。Userid為11。這就是我們想要的正確的結果。

 

我們的實例里面有3種實例情況。

 

1. 第一種是字符串上,我們直接輸進去了執行語句。


它會返回正常的結果。

 

2. 第二種情況,我們把這個eval賦值給了一些屬性,並且我們也在里面直接實現了一些表達式,還用來檢測了這個eval的參數是否合法。

 

3. 然后,我們用eval來解析了這個json格式的字符串。

 

它解析json格式的字符串,就在原來的字符串左右兩邊加上小括號,它就會把我們的json字符串解析成為一個json對象。

然后我們通過對象的屬性的訪問形式,就可以取到里面的值。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM