1. 程式人生 > >淺談js中的eval()函式

淺談js中的eval()函式

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);