1.JSON.stringify()用於從一個對象解析出字符串,eg:
var obj = {"name":"奔跑的蝸牛","age":"200"}; console.log(JSON.stringify(obj)); // 結果:{"name":"奔跑的蝸牛","age":"200"}; console.log(typeof JSON.stringify(obj)); // 結果:string
2.JSON.parse()用於從一個字符串中解析出json對象,eg:
var str = '{"name":"奔跑的蝸牛","age":"200"}'; console.log(JSON.parse(str)); // 結果:Object {name: "奔跑的蝸牛", age: "200"}; console.log(typeof JSON.parse(str)); // 結果:object
【注】單引號在外,里面應該用雙引號,否則報錯(3.html:16 Uncaught SyntaxError: Unexpected identifier);雙引號在外,里面應該用單引號
3.eval(string)
語法說明:
eval()函數可計算某個字符串,並執行其中的的JavaScript代碼。 如果參數是一個表達式,eval() 函數將執行表達式。如果參數是Javascript語句,eval()將執行 Javascript 語句。 string:必需。要計算的字符串,其中含有要計算的 JavaScript 表達式或要執行的語句。
var obj = '{"name":"奔跑的蝸牛","age":200}'; var evalobj=eval('('+obj+')'); console.log(evalobj); // 結果:Object {name: "奔跑的蝸牛", age: 200} console.log(typeof evalobj); // 結果:object
解釋:
加上圓括號的目的:是迫使eval函數,在處理JavaScript代碼的時候,強制將括號內的表達式(expression)轉化為對象,而不是作為語句(statement)來執行
4.JSON.parse()和eval(string),兩者的區別
var value = 1; var jsonstr = '{"data1":"hello","data2":++value}'; var data1 = eval('('+jsonstr+')');console.log(data1);//這時value值為2 var data2=JSON.parse(jsonstr);console.log(data2);//報錯
結果:
eval在解析字符串時,會執行該字符串中的代碼(這樣的后果是相當惡劣的), 如上例中,由於用eval解析一個json字符串而造成原先的value的值改變這是極其不安全的, 很容易被惡意的用戶在json字符串注入木馬鏈接。 所以推薦使用JSON.parse()來解析字符串。 該方法不僅可以捕捉JSON中的語法錯誤,並且允許你傳入一個函數,用來過濾或轉換解析結果
