【eval()函數(shù)】?
成都創(chuàng)新互聯(lián)專注于禹州企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),商城建設(shè)。禹州網(wǎng)站建設(shè)公司,為禹州等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
JavaScript有許多小竅門來(lái)使編程更加容易。?
其中之一就是eval()函數(shù),這個(gè)函數(shù)可以把一個(gè)字符串當(dāng)作一個(gè)JavaScript表達(dá)式一樣去執(zhí)行它。?
舉個(gè)小例子:?
var the_unevaled_answer = "2 + 3";?
var the_evaled_answer = eval("2 + 3");?
alert("the un-evaled answer is " + the_unevaled_answer + " and the evaled answer is " + the_evaled_answer);?
如果你運(yùn)行這段eval程序, 你將會(huì)看到在JavaScript里字符串"2 + 3"實(shí)際上被執(zhí)行了。?
所以當(dāng)你把the_evaled_answer的值設(shè)成 eval("2 + 3")時(shí), JavaScript將會(huì)明白并把2和3的和返回給the_evaled_answer。?
這個(gè)看起來(lái)似乎有點(diǎn)傻,其實(shí)可以做出很有趣的事。比如使用eval你可以根據(jù)用戶的輸入直接創(chuàng)建函數(shù)。?
這可以使程序根據(jù)時(shí)間或用戶輸入的不同而使程序本身發(fā)生變化,通過(guò)舉一反三,你可以獲得驚人的效果。?
在實(shí)際中,eval很少被用到,但也許你見過(guò)有人使用eval來(lái)獲取難以索引的對(duì)象。?
文檔對(duì)象模型(DOM)的問(wèn)題之一是:有時(shí)你要獲取你要求的對(duì)象簡(jiǎn)直就是痛苦。?
例如,這里有一個(gè)函數(shù)詢問(wèn)用戶要變換哪個(gè)圖象:變換哪個(gè)圖象你可以用下面這個(gè)函數(shù):?
function swapOne()?
{?
var the_image = prompt("change parrot or cheese","");?
var the_image_object;?
if (the_image == "parrot")?
{?
? the_image_object = window.document.parrot;?
}?
else?
{?
? the_image_object = window.document.cheese;?
}?
the_image_object.src = "ant.gif";?
}?
連同這些image標(biāo)記:?
[img src="/stuff3a/parrot.gif" name="parrot"]?
[img src="/stuff3a/cheese.gif" name="cheese"]?
請(qǐng)注意象這樣的幾行語(yǔ)句:?
? ? ??
the_image_object = window.document.parrot;?
它把一個(gè)圖象對(duì)象敷給了一個(gè)變量。雖然看起來(lái)有點(diǎn)兒奇怪,它在語(yǔ)法上卻毫無(wú)問(wèn)題。?
但當(dāng)你有100個(gè)而不是兩個(gè)圖象時(shí)怎么辦?你只好寫上一大堆的 if-then-else語(yǔ)句,要是能象這樣就好了:?
function swapTwo()?
{?
var the_image = prompt("change parrot or cheese","");?
window.document.the_image.src = "ant.gif";?
}?
不幸的是, JavaScript將會(huì)尋找名字叫 the_image而不是你所希望的"cheese"或者"parrot"的圖象,?
于是你得到了錯(cuò)誤信息:”沒聽說(shuō)過(guò)一個(gè)名為the_image的對(duì)象”。?
還好,eval能夠幫你得到你想要的對(duì)象。?
function simpleSwap()?
{?
var the_image = prompt("change parrot or cheese","");?
var the_image_name = "window.document." + the_image;?
var the_image_object = eval(the_image_name);?
the_image_object.src = "ant.gif";?
}?
如果用戶在提示框里填入"parrot",在第二行里創(chuàng)建了一個(gè)字符串即window.document.parrot. 然后包含了eval的第三?
行意思是: "給我對(duì)象window.document.parrot" - 也就是你要的那個(gè)圖象對(duì)象。一旦你獲取了這個(gè)圖象對(duì)象,你可以把?
它的src屬性設(shè)為ant.gif. 有點(diǎn)害怕?用不著。其實(shí)這相當(dāng)有用,人們也經(jīng)常使用它。?
我們常常在Javascript中間到Eval這個(gè)函數(shù),?
有些人覺得這個(gè)函數(shù)很奇怪,可以把一些字符串變的功能很強(qiáng)大?
在我們需要將普通的字符串轉(zhuǎn)變成具體的對(duì)象的時(shí)候,就會(huì)用到這個(gè)函數(shù)?
eval 函數(shù)對(duì)作為數(shù)字表達(dá)式的一個(gè)字符串進(jìn)行求值,其語(yǔ)法為:?
eval(expr)?
此處 expr 是一個(gè)被求值的字符串參數(shù)。如果該字符串是一個(gè)表達(dá)式,eval 求該表達(dá)式的值;如果該參數(shù)代表一個(gè)或多個(gè) JavaScript 語(yǔ)句,那么 eval 執(zhí)行這些語(yǔ)句。eval 函數(shù)可以用來(lái)把一個(gè)日期從一種格式(總是字符串)轉(zhuǎn)換為數(shù)值表達(dá)式或數(shù)字。?
==============================?
Eval 函數(shù)?
功能:先解釋Javascript代碼,然后在執(zhí)行它?
用法:Eval(codeString)?
codeString是包含有Javascript語(yǔ)句的字符串,在eval之后使用Javascript引擎編譯。?
注釋:?
例子:eval(id + "_icon.src="/imgs/collapse_up.gif'");?
id是之前設(shè)定的參數(shù),而在雙引號(hào)中的字符串則是需要編譯的?
引用:?
function tophide(id)? ? //id indicates menu?
{?
? ? if (top.topframeset.rows == "31,*")?
? ? {?
? ? ? ? top.topframeset.rows = "86,*";?
? ? ? ? eval(id + "_icon.src="/imgs/collapse_up.gif'");?
? ? ? ? eval(id + "_icon.alt='Collapse The Head'");?
? ? ? ? head.style.display = "block"?
? ? ? ? }?
? ? else?
? ? {?
? ? ? ? top.topframeset.rows = "31,*";?
? ? ? ? eval(id + "_icon.src="/imgs/collapse_down.gif'");?
? ? ? ? eval(id + "_icon.alt='Expand The Head'");?
? ? ? ? head.style.display = "none"?
? ? }?
}
最后給你們推薦一個(gè)群,如果你還想提升自己,
歡迎加入Java技術(shù)交流群:659270626
本群提供免費(fèi)的學(xué)習(xí)指導(dǎo) 提供Spring源碼、MyBatis、Netty、redis,Kafka、MySQL、Zookeeper、Tomcat、Docker、Dubbo、Nginx、分布式、高并發(fā)、性能調(diào)優(yōu)、等架構(gòu)技術(shù)架構(gòu)資料 以及免費(fèi)的解答
不懂的問(wèn)題都可以在本群提出來(lái) 之后還會(huì)有職業(yè)生涯規(guī)劃以及面試指導(dǎo)?