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

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

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

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

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

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

   function te (){io

   eval('var a=1;')function

     }變量

  te();object

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()方法不會當傳入字符串是對象使繼續使用上述的方式,然會返回原對象。

相關文章
相關標籤/搜索