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

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

二、eval函數接收一個參數s,若是s不是字符串,則直接返回s。不然執行s語句。若是s語句執行結果是一個值,則返回此值,不然返回undefined。 須要特別注意的是對象聲明語法「{}」並不能返回一個值,須要用括號括起來纔會返回值。以下:code

 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原樣返回。字符串

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

   function te (){function

   eval('var a=1;')變量

     }object

  te();語法

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

四、有兩種的處理方式能夠使在函數內部使用的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()方法不會當傳入字符串是對象使繼續使用上述的方式,然會返回原對象。

相關文章
相關標籤/搜索