淺談js中的eval()函式
阿新 • • 發佈:2019-01-08
1.定義
eval()是一個函式,有且只有一個引數string,為字串型別
eval(string)
特點:若string為js程式碼時,會直接解析執行,若是普通字串,則返回原字串。
2.例項
2.1引數string為js程式碼:
eval("var a =1;var b=4; alert(a+b)");
執行結果是:alert出一個5
執行過程 :eval將字元作為js進行解析,先進行運算,再alert
eval("alert('hello')");
執行結果:alert出hello
2.2引數string為普通字串:
eval("hello"); 執行後的結果是:返回字串hello
3.有關eval解析json資料
錯誤例項:
var jsonstr = "{name:'test',age:18}";
var jsonobj = eval(jsonstr);//拼接過程
錯誤提示:
SyntaxError: invalid label
為什麼會這樣?
原因在於:eval本身的問題。 由於json是以”{}”的方式來開始以及結束的,在JS中,它會被當成一個語句塊來處理,所以必須強制性的將它轉換成一種表示式。
加上圓括號的目的是迫使eval函式在處理JavaScript程式碼的時候強制將括號內的表示式(expression)轉化為物件,而不是作為語句 (statement)來執行。舉一個例子,例如物件字面量{},如若不加外層的括號,那麼eval會將大括號識別為JavaScript程式碼塊的開始和 結束標記,那麼{}將會被認為是執行了一句空語句。所以下面兩個執行結果是不同的:
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]
如何解決?
var josnobj = eval("("+jsonstr+")");
或者這樣
eval("var jsonobj = " + jsonstr);