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