JSON.stringify()、eval(),JSON.parse()各自的區別於作用,evaljson.parse

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.