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 也是全局的。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章