JS中eval解析字符串爲json格式

由於 Ajax 的興起, JSON 這種輕量級的數據格式作爲客戶端與服務器端之間傳輸的格式逐漸流行起來,進而出現的問題是如何將服務器端構建好的 JSON 數據轉換爲可用的 JavaScript 對象,利用 eval 函數無疑是一種簡單而直接的方法。在轉化的時候需要將 JSON 字符串的外面包裝一層園括號: 

var jsonObject = eval("("+ jsonFormat +")") 

  加園括號的目的是迫使 eval 函數在評估 JavaScript 代碼的時候強制將括號內的表達式(expression)轉換爲對象,而不是作爲語句(statement)來執行。舉一個例子,例如對象字面量{},如若不佳加外層的括號,那麼eval會將大括號之別爲JavaScript代碼塊的開始結束標記機,那麼{}將被認爲是執行了一句空語句。所以下面兩個執行結果是不同的: 


複製代碼代碼如下:

alert(eval("{}")); //return undefined 
alert(eval("({})")); //return [object Object] 

  JSON 格式的名字部分爲什麼要加引號?因爲eval函數會將{foo:"bar"}解釋成合法的JavaScript 語句,而非表達式。但人們往往是想讓eval將這段代碼解釋成一個對象。所以JSON 格式會強制你去在名字的外側加上引號,再結合圓括號,eval就不會錯誤的將JSON解釋成代碼塊。 

複製代碼代碼如下:

//eval 錯誤解析語義 
alert(eval('{foo:"bar"}')); //return "bar",incorrect 
//eval 正確解析JSON 
alert(eval('({"foo":"bar"})'));//return JSON object,correct 
發佈了8 篇原創文章 · 獲贊 24 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章