JSON.stringify()、eval(),JSON.parse()各自的區別於作用,evaljson.parse
JSON.stringify(value [, replacer] [, space])
value
必需。 要轉換的 JavaScript 值(通常為對象或數組)。
replacer
可選。 用於轉換結果的函數或數組。
如果 replacer 為函數,則 JSON.stringify 將調用該函數,並傳入每個成員的鍵和值。 使用返回值而不是原始值。 如果此函數返回 undefined,則排除成員。 根對象的鍵是一個Null 字元串:""。
如果 replacer 是一個數組,則僅轉換該數組中具有鍵值的成員。 成員的轉換順序與鍵在數組中的順序一樣。 當 value 參數也為數組時,將忽略 replacer 數組。
space
可選。 向返回值 JSON 文本添加縮排、空格和分行符號以使其更易於讀取。
如果省略 space,則將產生返回值文本,而沒有任何額外空格。
如果 space 是一個數字,則返回值文本在每個層級縮排指定數目的空格。 如果 space 大於 10,則文本縮排 10 個空格。
如果 space 是一個非Null 字元串(例如“\t”),則返回值文本在每個層級中縮排字串中的字元。
如果 space 是長度大於 10 個字元的字串,則使用前 10 個字元。
返回一個包含 JSON 文本的字串。
JSON.stringify()、eval()都是用來解析字串並將字串轉換為json資料
var jsonData = '{"data1":"Hello,", "data2":"world!}';
var evalJson=eval('('+jsonData+')');
加上圓括弧的目的是迫使eval函數在處理JavaScript代碼的時候強制將括弧內的運算式(expression)轉化為對象,而不是作為語句(statement)來執行
var jsonParseJson=JSON.parse(jsonData);
這樣就把json格式的字串轉化為json對象
但二者解析是由區別的
var value = 1;
var jsonstr = '{"data1":"hello","data2":++value}';
var data1 = eval_r('('+jsonstr+')');console.log(data1);//這時value值為2
而var data2=JSON.parse(jsonstr);console.log(data2);//報錯
總結:eval在解析字串時,會執行該字串中的代碼(這樣的後果是相當惡劣的),
如上例中,由於用eval解析一個json字串而造成原先的value的值改變這是極其不安全的,
很容易被惡意的使用者在json字串注入木馬連結。
所以推薦使用JSON.parse()來解析字串。
該方法不僅可以捕捉JSON中的語法錯誤,並且允許你傳入一個函數,用來過濾或轉換解析結果