說明:如果您有任何疑問或想咨詢其他業(yè)務(wù)請撥打電話 400 685 0732
全網(wǎng)監(jiān)測海量數(shù)據(jù)按需發(fā)布監(jiān)測預(yù)警
實時把握輿情動態(tài)精準(zhǔn)追溯信息源頭
在python程序語言編寫的過程當(dāng)中,有一些函數(shù)是我們經(jīng)??梢钥匆姷?,但有些函數(shù)是比較罕見但確實會出現(xiàn)的,那今天小編就來說一說在日常使用過程當(dāng)中,并不是經(jīng)常常見的函數(shù)——pythoneval函數(shù)。
pythoneval函數(shù)——eval函數(shù)的作用是什么
eval函數(shù)是強大的數(shù)碼轉(zhuǎn)換引擎,字符串經(jīng)eval轉(zhuǎn)換后得到一個javascript對象,
舉簡單例子:
vara=eval(“5″);等效于vara=5;
vara=eval(“’5′”);等效于vara=’5′;
varobj=eval(“({name:’cat’,color:’black’})”);等效于varobj={name:’cat’,color:’black’};
eval(“alert(‘helloworld!’);”);等效于alert(‘helloworld!’);
js的數(shù)據(jù)類型為弱類型,可以在定義的時候指定數(shù)據(jù)類型,也可以在運算過程中強制數(shù)據(jù)類型轉(zhuǎn)換
一個對象經(jīng)過eval轉(zhuǎn)換后數(shù)據(jù)類型不確定,在相加過程中自動與其他數(shù)據(jù)類型一致
eval應(yīng)用實例,如下:
后臺傳給前臺一個Json數(shù)據(jù)如
{“id”:1,”name”:”zhangsan”,”age”:30,”address”:”beijing”}
前臺這樣寫
function(returnedData,status){
varpeople=returnedData;
alert(people);
varid=people.id;
varname=people.name;
varage=people.age;
varaddress=people.address;
}
如上這樣寫得話,取到的returnedData是一個字符串而不是一個對象,所以下面取不到對象的屬性
如果將varpeople=eval(“(“+returnedData+”)”);
即可將people轉(zhuǎn)換成一個對象,也就取得對象的屬性了
pythoneval函數(shù)為何不常見
1、eval太神秘了,以至于很多人用錯。所以不推薦使用。
比如這段代碼你應(yīng)該見過:
<imgsrc=”https://pic3.***.com/50/bf68046fed17de9b1e195e3d7fcb247f_hd.jpg”data-rawwidth=”632″data-rawheight=”136″class=”origin_imagezh-lightbox-thumb”width=”632″data-original=”https://pic3.***.com/bf68046fed17de9b1e195e3d7fcb247f_r.jpg”>
然而實際上,我們可以這樣寫:
<imgsrc=”https://pic3.***.com/50/0d2bb9e0fbb2e206fdf707ac20b9b943_hd.jpg”data-rawwidth=”642″data-rawheight=”132″class=”origin_imagezh-lightbox-thumb”width=”642″data-original=”https://pic3.***.com/0d2bb9e0fbb2e206fdf707ac20b9b943_r.jpg”>這并不是eval不好而是因為容易被用錯。
eval只是一個普通的函數(shù),只不過他有一個快速通道通向編譯器,可以將string變成可執(zhí)行的代碼。有類似功能的還有Function,setInterval和setTimeout。
2、eval不容易調(diào)試。用chromeDev等調(diào)試工具無法打斷點調(diào)試,所以麻煩的東西也是不推薦使用的…
3、說到性能問題,在舊的瀏覽器中如果你使用了eval,性能會下降10倍。在現(xiàn)代瀏覽器中有兩種編譯模式:fastpath和slowpath。fastpath是編譯那些穩(wěn)定和可預(yù)測(stableandpredictable)的代碼。而明顯的,eval不可預(yù)測,所以將會使用slowpath,所以會慢。
還有一個是,在使用類似于ClosureCompiler等壓縮(混淆)代碼時,使用eval會報錯。
4、關(guān)于安全性,我們經(jīng)常聽到eval是魔鬼,他會引起XSS攻擊,實際上,如果我們對信息源有足夠的把握時,eval并不會引起很大的安全問題。而且不光是eval,其他方式也可能引起安全問題。比如:
莫名其妙給你注入一個<script src=””>標(biāo)簽,或者一段來歷不明的JSON-P請求,再或者就是Ajax請求中的eval代碼…
所以啊,只要你的信息源不安全,你的代碼就不安全。不單單是因為eval引起的。
你用eval的時候會在意XSS的問題,你越在意就越出問題,出的多了,eval就成噩夢了。
5、效率問題是程序邏輯問題。對于一些有執(zhí)行字符串代碼需求的程序中,不用eval而用其他方式模擬反而會帶來更大的開銷。
以上就是有關(guān)pythoneval函數(shù)的所有內(nèi)容,如果大家還想了解更多與之有關(guān)的信息,歡迎關(guān)注我們文軍營銷的官網(wǎng),這是你還有更多精彩的內(nèi)容等著你,不管你是查資料還是學(xué)習(xí)都能夠找到相應(yīng)的信息。
推薦閱讀
說明:如果您有任何疑問或想咨詢其他業(yè)務(wù)請撥打電話 400 685 0732