1. 程式人生 > >eval()和JSON.parse()解析數據

eval()和JSON.parse()解析數據

bsp string 函數 作用 報錯 parse sta 強制 數據

JSON.parse()的用法比較單一,只能常規的將字符串JSON化,而eval()的用法很強大,除了常規的將字符串JSON化,還可以進行運算,拼接,處理表達式

1.如果data是字符串,使用eval("("+data+")")可以將其轉換為json對象,和JSON.parse的功能一樣。
如果data是json對象,使用eval("("+data+")")會報錯,正如你描述的錯誤。eval一個json對象, 沒有什麽作用,這個時候不需要使用eval方法,直接用data即可。

2.為什麽eval要添加括號呢?

首先eval是可以處理js表達式的

eval("x=10;y=20;document.write(x*y)");
document.write( eval(
"2+2")); document.write( eval(x+17)); //得到結果 200427;

添加括號原因eval本身的問題。 由於json是以{}的方式來開始以及結束的,在JS中,它會被當成一個語句塊來處理,而eval不能處理語句塊,可以處理表達式,所以加上括號強制性的將它轉換成一種表達式。

加上圓括號的目的是迫使eval函數在處理JavaScript代碼的時候強制將括號內的表達式(expression)轉化為對象,而不是作為語句(statement)來執行。舉一個例子,例如對象字面量{},如若不加外層的括號,那麽eval會將大括號識別為JavaScript代碼塊的開始和結束標記,那麽{}將會被認為是執行了一句空語句。

console.log(eval("{}"); // undefined 
console.log(eval("({})");// object[Object] 

eval()和JSON.parse()解析數據