JSON.stringify
這個 API 想必你們都用過,能夠幫助咱們將數據解析成字符串類型,以下的例子:數組
let obj = { name: 'lxcan', age: 18, hobby: 'sleep', money: null }; JSON.stringify(obj); // '{"name":"lxcan","age":18,"hobby":"sleep","money":null}'
想必這樣的寫法你們都知道,可是其實 JSON.stringify
總共接受三個參數。函數
第二個參數能夠傳入一個數組或者函數。code
先來看下傳入數組結果會是什麼?字符串
// 第二個參數傳入一個數組 JSON.stringify(obj, ['name', 'age']); // '{"name":"lxcan","age":18}'
能夠看到,當傳入數組的時候,只有數組內的屬性名纔會被正常序列化。string
那麼當第二個參數傳入函數會是什麼呢?序列化
// 第二個參數傳入一個函數 let obj1 = { name: new Set([1]) }; JSON.stringify(obj1, (key, value) => { return value instanceof Set ? [...value] : value }); // 正常序列化是 "{"name":{}}" // 例子中的輸出爲 "{"name":[1]}"
// 第二個參數傳入一個函數 let obj2 = { lxc: new Map([['name', 'lxcan'], ['age', 18]]) }; JSON.stringify(obj2, (key, value) => { return value instanceof Map ? [...value] : value }); // 正常序列化是 "{"lxc":{}}" // 例子中的輸出爲 "{"lxc":[["name","lxcan"],["age",18]]}"
咱們都知道 JSON.stringify
是不能處理某些值的,就好比例子中的 Set/Map 類型的值就不能正常序列化。可是其實咱們能夠經過傳入函數的方式幫助咱們將 Set/Map 類型的值轉換爲數組類型,從而使得數據可以被正常序列化。數據
第三個參數能夠傳入數字或者字符串類型,該參數用於美化輸出。正常來講輸出的結果都是一行文本,在數據量小的時候閱讀起來沒啥壓力,可是當數據量龐大的時候就會增長閱讀難度。這個參數在這種時候就很是有用。co
// 第三個參數傳入數字 JSON.stringify(obj, null, 2); // { // "name": "lxcan", // "age": 18, // "hobby": "sleep", // "money": null // }
當傳入數字時,每一個屬性都會換行而且帶有縮進空格。字符
// 第三個參數傳入字符串 JSON.stringify(obj, null, '--'); // { // --"name": "lxcan", // --"age": 18, // --"hobby": "sleep", // --"money": null // }
當傳入字符串時,每一個屬性照樣都會換行而且在開頭加上你傳入的字符串。gif
以上就是本篇文章的內容了,雖然這單純屬於 API 範疇的知識,可是大部分同窗應該並不知道 JSON.stringify
還擁有這樣的能力。