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