js中eval() 方法的使用以及一些特殊的使用方式


1、eval方法只能在非嚴格模式中進行使用,在use strict中是不允許使用這個方法的。

2、eval函數接收一個參數s,如果s不是字符串,則直接返回s。否則執行s語句。如果s語句執行結果是一個值,則返回此值,否則返回undefined。 需要特別注意的是對象聲明語法“{}”並不能返回一個值,需要用括號括起來才會返回值。如下:

 var code1='"a" + 2'; //表達式
var code2='{a:2}'; //語句
alert(eval(code1)); //->'a2'
alert(eval(code2)); //->2
alert(eval('(' + code2 + ')')); //->[object Object]

  當eval中的字符串內是對象時加上括號則可以將原對象原樣返回,如果將code2={a:2,b:3}時直接eval(code2)時會報錯,加上括號就會將code2原樣返回。

3、eval直接在函數內部使用則返回的是局部變量

   function te (){

   eval('var a=1;')

     }

  te();

alert(a);//這樣會報錯,因為a是局部變量,只能在te方法內使用

4、有兩種的處理方式可以使在函數內部使用的eval成為全局變量

(1)利用window.eval()使其成為全局的

        function te (){

     window.eval(‘var a=1’)    

     }

     te();

 a 變量也是全局的

(2) function te (){

    var a=eval;

    a(‘var b=1’);

     }

  te();

  這種方式下變量b 也是全局的。

所以說在非嚴格的模式下,又多了一種方法將JSON字符串形式轉換為對象的形式。就是利用var m=eval(‘(’+data+’)’),m是JSON對象。其功能和JSON.parse()是相似的,但是當已經為通過JSON.parse()轉換為對象后的JSON不能再調用該函數繼續進行轉換,這樣會報錯,但是eval()方法不會當傳入字符串是對象使繼續使用上述的方式,然會返回原對象。

 


免責聲明!

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



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