eval() Function Compute JavaScript 字串,並把它作為指令碼代碼來執行。
如果參數是一個運算式,eval() 函數將執行運算式。如果參數是Javascript語句,eval()將執行 Javascript 語句。
文法
複製代碼 代碼如下:
eval(string)
| 參數 |
描述 |
| string |
必需。要計算的字串,其中含有要計算的 JavaScript 運算式或要執行的語句。 |
eval()函數用法詳解:
此函數可能使用的頻率並不是太高,但是在某些情況下具有很大的作用,下面就介紹一下eval()函數的用法。
此函數可以接受一個字串str作為參數,並把此str當做一段javascript代碼去執行,如果str執行結果是一個值則返回此值,否則返回undefined。如果參數不是一個字串,則直接返回該參數,執行個體如下:
eval("var a=1");//聲明一個變數a並賦值1。eval("2+3");//執行加運算,並返回運算值。eval("mytest()");//執行mytest()函數。eval("{b:2}");//聲明一個對象。
在以上代碼特別注意的是,最後一個語句是聲明了一個對象,如果想返回此對象,則需要在對象外面再嵌套一層小括弧,如下:
複製代碼 代碼如下:
eval("({b:2})");
以上內容簡單介紹了eval()函數的用法,比較容易理解。此函數最讓人感到困惑的是關於它的範圍問題,下面就結合執行個體來介紹一下相關內容,先看一段代碼執行個體:
function a(){ eval("var x=1"); console.log(x); } a(); console.log(x);
在上面的代碼中,第一個alert()函數能夠彈出1,而第二個會因為x未定義而報錯。
由以上表現可以得出,eval()函數並不會建立一個新的範圍,並且它的範圍就是它所在的範圍。這在所有主流瀏覽器都是如此,但是有時候需要將eval()函數的範圍設定為全域,當然可以將eval()在全域範圍中使用,但是往往實際應用中,需要在局部範圍使用具有全域範圍的此函數,這個時候可以用window.eval()的方式實現,例如以上代碼可以改造如下:
function a(){ window.eval("var x=1"); console.log(x); } a(); console.log(x);
在上面的代碼中,兩個alert()語句都能夠正常彈出1。但是此中方式在標準瀏覽器中是可以的,但是在IE8和IE8以下瀏覽器中的表現依然和eval()一樣,範圍是它們所在的範圍。這個時候可以使用IE瀏覽器專屬的window.execScript()解決IE8和IE8瀏覽器的問題。為了實現相容所有主流瀏覽器,把代碼改造如下:
function a(){ if(window.execScript){ window.execScript("var x=1"); } else{ window.eval("var x=1"); } console.log(x); } a(); console.log(x);
如果瀏覽器支援window.execScript(),則使用此函數,不支援則使用window.eval(),這樣就可以解決IE8和IE8以下瀏覽器的問題。
以上內容是小編給大家分享的JavaScript中eval()函數用法詳解,希望大家喜歡。