JavaScript中eval()函數(shù)用法詳解
eval() 函數(shù)計(jì)算 JavaScript 字符串,并把它作為腳本代碼來執(zhí)行。
如果參數(shù)是一個(gè)表達(dá)式,eval() 函數(shù)將執(zhí)行表達(dá)式。如果參數(shù)是Javascript語句,eval()將執(zhí)行 Javascript 語句。
語法
eval(string)
參數(shù) | 描述 |
---|---|
string | 必需。要計(jì)算的字符串,其中含有要計(jì)算的 JavaScript 表達(dá)式或要執(zhí)行的語句。 |
eval()函數(shù)用法詳解:
此函數(shù)可能使用的頻率并不是太高,但是在某些情況下具有很大的作用,下面就介紹一下eval()函數(shù)的用法。
此函數(shù)可以接受一個(gè)字符串str作為參數(shù),并把此str當(dāng)做一段javascript代碼去執(zhí)行,如果str執(zhí)行結(jié)果是一個(gè)值則返回此值,否則返回undefined。如果參數(shù)不是一個(gè)字符串,則直接返回該參數(shù),實(shí)例如下:
eval("var a=1");//聲明一個(gè)變量a并賦值1。 eval("2+3");//執(zhí)行加運(yùn)算,并返回運(yùn)算值。 eval("mytest()");//執(zhí)行mytest()函數(shù)。 eval("{b:2}");//聲明一個(gè)對象。
在以上代碼特別注意的是,最后一個(gè)語句是聲明了一個(gè)對象,如果想返回此對象,則需要在對象外面再嵌套一層小括號,如下:
eval("({b:2})");
以上內(nèi)容簡單介紹了eval()函數(shù)的用法,比較容易理解。此函數(shù)最讓人感到困惑的是關(guān)于它的作用域問題,下面就結(jié)合實(shí)例來介紹一下相關(guān)內(nèi)容,先看一段代碼實(shí)例:
function a(){ eval("var x=1"); console.log(x); } a(); console.log(x);
在上面的代碼中,第一個(gè)alert()函數(shù)能夠彈出1,而第二個(gè)會因?yàn)閤未定義而報(bào)錯(cuò)。
由以上表現(xiàn)可以得出,eval()函數(shù)并不會創(chuàng)建一個(gè)新的作用域,并且它的作用域就是它所在的作用域。這在所有主流瀏覽器都是如此,但是有時(shí)候需要將eval()函數(shù)的作用域設(shè)置為全局,當(dāng)然可以將eval()在全局作用域中使用,但是往往實(shí)際應(yīng)用中,需要在局部作用域使用具有全局作用域的此函數(shù),這個(gè)時(shí)候可以用window.eval()的方式實(shí)現(xiàn),例如以上代碼可以改造如下:
function a(){ window.eval("var x=1"); console.log(x); } a(); console.log(x);
在上面的代碼中,兩個(gè)alert()語句都能夠正常彈出1。但是此中方式在標(biāo)準(zhǔn)瀏覽器中是可以的,但是在IE8和IE8以下瀏覽器中的表現(xiàn)依然和eval()一樣,作用域是它們所在的作用域。這個(gè)時(shí)候可以使用IE瀏覽器獨(dú)有的window.execScript()解決IE8和IE8瀏覽器的問題。為了實(shí)現(xiàn)兼容所有主流瀏覽器,把代碼改造如下:
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(),則使用此函數(shù),不支持則使用window.eval(),這樣就可以解決IE8和IE8以下瀏覽器的問題。
以上內(nèi)容是小編給大家分享的JavaScript中eval()函數(shù)用法詳解,希望大家喜歡。
相關(guān)文章
關(guān)于javascript 回調(diào)函數(shù)中變量作用域的討論
關(guān)于回調(diào)函數(shù)中變量作用域的討論精品推薦,大家可以參考下。2009-09-09Javascript 訪問樣式表實(shí)現(xiàn)代碼
Javascript訪問樣式表--又一篇好文章2009-08-08webpack-cli在webpack打包中的作用小結(jié)
webpack?是打包代碼時(shí)依賴的核心內(nèi)容,而?webpack-cli?是一個(gè)用來在命令行中運(yùn)行?webpack?的工具,那么webpack-cli在webpack打包中的作用是什么,本文就詳細(xì)的介紹一下,感興趣的可以了解一下2022-04-04學(xué)習(xí)jQuey中的return false
這篇文章主要介紹了jQuey中的return false作用,以及解決jquery中的return false不起作用的方法,感興趣的小伙伴們可以參考一下2015-12-12快速解決js中window.location.href不工作的問題
下面小編就為大家?guī)硪黄焖俳鉀Qjs中window.location.href不工作的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11基于JavaScript實(shí)現(xiàn)輪播圖效果
這篇文章主要為大家詳細(xì)介紹了基于JavaScript實(shí)現(xiàn)輪播圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-01-01基于javascript實(shí)現(xiàn)最簡單選項(xiàng)卡切換
這篇文章主要為大家詳細(xì)介紹了基于javascript實(shí)現(xiàn)最簡單選項(xiàng)卡切換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02