JSON.stringify()、JSON.parse()和eval(string)


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中的語法錯誤,並且允許你傳入一個函數,用來過濾或轉換解析結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM