1. 程式人生 > 實用技巧 >JSON.parse()、JSON.stringify()和eval()的作用

JSON.parse()、JSON.stringify()和eval()的作用

JSON.parse() 函式 作用: 將JavaScript 物件表示法(json)字串轉換成物件 語法: JSON.parse(text, [,reviver])   引數: text: 必需, 一個有效的 json 字串     reviver:可選。一個轉換結果的函式。將為物件的每個成員呼叫此函式 返回值: 返回一個物件或者陣列
 var json = '{"name":"GDT","age":23,"University":"GDUT"}';
var info = JSON.parse(json);  //解析為JSON物件
console.log(json)  // 結果 {"name":"GDT","age":23,"University":"GDUT"}
console.log(typeof info) // 結果 object
JSON.stringify() 函式 作用: 將 JavaScript 值轉換為 JavaScript 物件的表示式(JSON) 字串 與 JSON.parse作用相反 語法: JSON.stringify(value, [,replacer] [,space]) 引數:    value: 必需,通常為需要轉換的JavaScript值(通常為物件或者陣列)   replacer: 可選,用於轉換結果的函式或者陣列   space: 可選。向返回值 JSON 文字新增縮排、空格和換行符以使其更易於讀取。 返回值:一個包含JSON文字的字串
var json = {"name":"GDT","age":23,"University":"GDUT"}
var info = JSON.stringify(json) // 解析為JSON字串
console.log(info) // 結果 {"name":"GDT","age":23,"University":"GDUT"} 
console.log(typeof info) // string
eval() 函式 作用:eval() 函式可計算某個字串,並執行其中的的 JavaScript 程式碼。 語法:eval(string) 引數:   string: 必需,要計算的字串,其中含有要計算的 JavaScript 表示式或要執行的語句。
返回值:返回計算string的值,如果有的話 (沒有則不做任何改變返回) 使用eval()函式也可以將JSON字串解析為物件,這個功能能完成JSON.parse()的功能,但是有不一樣的地方,請看下面程式碼
// JSON.parse()
var json = '{"name":"GDT","age":23,"University":"GDUT"}';
var info = JSON.parse(json);    //解析為JSON物件
document.write(info);            //output為[object Object]

//eval()
var json = '{"name":"GDT","age":23,"University":"GDUT"}';
var info = eval('(' + json + ')');  //解析為JSON物件
document.write(info);            //output為[object Object]
不知道大家有木有注意到eval()還要用一對圓括號將字串包起來,對此我尋找到比較好的解釋就是:   原因:歸結於eval本身的問題,由於json是以”{}”的方式來開始以及結束的,在JS中,它會被當成一個語句塊來處理,所以必須強制性的將它轉換成一種表示式。   解決方法:加上圓括號的目的是迫使eval函式在處理JavaScript程式碼的時候強制將括號內的表示式(expression)轉化為物件,而不是作為語句(statement)來執行。舉一個例子,例如物件字面量{},如若不加外層的括號,那麼eval會將大括號識別為JavaScript程式碼塊的開始和結束標記,那麼{}將會被認為是執行了一句空語句。