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