摘要:的使用函數可將字符串轉換為代碼執行,并返回一個或多個值調用時,實例為代碼的返回值的返回值遵循以下規則如果的參數不是字符串,那么將直接返回參數。錯誤將這個函數表達式解釋為函數的聲明,使得它沒有任何的返回值。
eval()的使用
eval() 函數可將字符串轉換為代碼執行,并返回一個或多個值
eval調用時,實例為eval( "( javascript代碼 )" )
eval()的返回值
eval()的返回值遵循以下規則:
如果eval()的參數不是字符串,那么eval()將直接返回參數。
如果eval()的參數是字符串,那么eval()將這個字符串解析成代碼后進行執行,并返回最后一行代碼執行的結果。
如果字符串無法解析成合法的代碼,eval()將拋出SyntaxError錯誤。
舉例1(eval的參數不是字符串):
運行結果(谷歌瀏覽器測試):
舉例2(eval的參數是字符串):
運行結果(谷歌瀏覽器測試):
當然,如果不使用eval()方法,上面的代碼可以使用匿名函數寫
舉例3(字符串無法解析成合法的代碼):
運行結果(谷歌瀏覽器測試):此時可以看到 谷歌瀏覽器控制臺報錯
IE6/7/8不兼容
使用IE8來測試代碼:
var str = "function(){alert("Test eval")}"; var fn = eval("(" + str + ")"); fn();
沒有彈出框,控制臺報錯:
解決方法:
a)var s = "function(){alert("Test!")}";
b)var s = "0?0:function(){alert("Test!")}";
當然這個解決方法是從國外論壇里面找到(網站:http://stackoverflow.com/ques...
大意是:這在JScript解釋器里面是一個bug,它不會出現在IE9除非你使用混雜模式或兼容來看。IE8錯誤將這個函數表達式解釋為函數的聲明,使得它沒有任何的返回值。所以你可以寫成其他比較典型的表達式,從從而在JScript解釋器中構成一個表達式。
那么我們就知道IE6/7/8使用JScrip解釋器來解析eval()把參數當初函數聲明,沒有返回值,所以我么可以把eval()函數里面的字符串代碼寫成一個表達式,即可以寫成:
function(){alert("Test!")} 或 0?0:function(){alert("Test!")}
改代碼:
var str = "0 ? 0 : function(){alert("Test eval")}"; var fn = eval("(" + str + ")"); fn();
在IE8里面測試結果:
最后利用ietester工具測試在IE6也同樣沒有問題。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/80780.html
摘要:最簡單的區分所有瀏覽器都會顯示為紫色會顯示紅色會變為藍色會變為綠色上面的樣式解釋為順序是顯示的結果用瀏覽,顏色是紫色用瀏覽,顏色是紅色用瀏覽,顏色是藍色用瀏覽,顏色是綠色支持偽元素偽元素和在及以下不支持兼容可以識別寫法和兼容則需要引 1. 最簡單的CSS Hack 區分 IE6 、 IE7 、IE8 css .color{ background-color: #CC00FF; ...
摘要:五總結和應對方案安全性分析是否安全主要由數據源決定,如果數據源不安全,只是提供了一種攻擊方法而已。方案嚴格管控數據源。方案低頻使用時影響不大,不要高頻使用,建議尋找替代方案。方案了解直接調用和間接調用的區別,遇到問題時不要懵逼即可。 為什么要少用eval? eval是 js 中一個強大的方法。都說eval == evil等于true,這篇文章將研討eval的幾個缺點和使用注意事項。 目...
摘要:單引號與雙引號我們看到一開始的舉例中小明使用單引號來套雙引號,如果反過來寫呢,如小明相信也不少人習慣用雙引號套單引號結果使用來轉化也會報錯兼容問題瀏覽器中不支持使用方法轉成對象,所以需要引入一個文件。 相信大部分人都知道或者去百度檢索都會得到將js中的字符串轉化成json對象常見的3種方法 舉例: var str = {name:小明,age:18}; 將字符串轉化json對象: ...
閱讀 3258·2021-09-22 15:58
閱讀 1722·2019-08-30 14:17
閱讀 1726·2019-08-28 18:05
閱讀 1511·2019-08-26 13:33
閱讀 689·2019-08-26 12:20
閱讀 614·2019-08-26 12:18
閱讀 3195·2019-08-26 11:59
閱讀 1411·2019-08-26 10:36