前段時間勾股有提到stringify是支持三個參數,刷新的了個人認知,後來查到文檔才發現還真的是支持三個參數的。json
參考資料:數組
stringify方法顧名思義,就是把JSON序列換,其語法以下:函數
JSON.stringify(value[, replacer [, space]])
注意到它接收三個參數,後面2個參數是可選的。spa
var data = {name:"niuzai",info:{age:18,sex:"male"}}; JSON.stringify(data); //{"name":"niuzai","info":{"age":18,"sex":"male"}}
這裏要注意:stringily對data裏的數據類型有一些要求:code
JSON.stringify({x: 5, y: 6}); // '{"x":5,"y":6}' 或者 '{"y":6,"x":5}' 均可能
undefined
、任意的函數以及 symbol 值,在序列化過程當中會被忽略(出如今非數組對象的屬性值中時)或者被轉換成 null
(出如今數組中時)。var obj = {"undefined":undefined,"func":function(){},"symbol":Symbol("")}; JSON.stringify(data); //"{}" var arr = [undefined,Symbol(""),function(){}]; JSON.stringify(arr); //[null,null,null]
replacer
參數中強制指定包含了它們。JSON.stringify({[Symbol("foo")]: "foo"}); //'{}'
JSON.stringify( Object.create(null, { x: { value: 'x', enumerable: false }, y: { value: 'y', enumerable: true } }) ); // '{"y":"y"}'
第二個參數頗有意思,能夠爲一個過濾函數,也能夠是一個數組。對象
當爲數組時被序列化的值的每一個屬性都會通過該函數的轉換和處理,當爲數組時則只有包含在這個數組中的屬性名纔會被序列化到最終的 JSON 字符串中。ip
過濾函數仍是比較有意思的,你能夠控制輸出,好比以前提到的會被忽略的類型,能夠在這裏人工的處理,強制輸出(固然是別的類型)。文檔
var data = { name:"niuzai", info:{ age:18, sex:"male" } }; JSON.stringify(data, function(key, val){ console.log("key is %s", key); console.log("val is %s", typeof(val)); return val; }); //key is //key is //val is object //key is name //val is string //key is info //val is object //key is age //val is number //key is sex //val is string "{"name":"niuzai","info":{"age":18,"sex":"male"}}"
注意:這裏必定要return一個值給下一個遍歷函數做爲參數傳入,若是不return的話,後面的遍歷就無法玩下去了。字符串
JSON.stringify(data, ["name", "info", "sex"]); //age因爲不在列表裏,因此沒被序列化 //"{"name":"niuzai","info":{"sex":"male"}}"
第三參數space
用來控制結果字符串裏面的間距。若是是一個數字, 則在字符串化時每一級別會比上一級別縮進多這個數字值的空格(最多10個空格);若是是一個字符串,則每一級別會比上一級別多縮進用該字符串(或該字符串的前十個字符)。get
JSON.stringify(data,null,10); //每個層級比上一個多10個空格 "{ "name": "niuzai", "info": { "age": 18, "sex": "male" } }" JSON.stringify(data,null,'\t'); //每個層級比上一個多一個製表符 "{ "name": "niuzai", "info": { "age": 18, "sex": "male" } }"
若是一個被序列化的對象擁有 toJSON
方法,那麼該 toJSON
方法就會覆蓋該對象默認的序列化行爲
var data = { name:"niuzai", info:{ age:18, sex:"male" }, toJSON:function(){ return "by toJSON"; } }; JSON.stringify(data); //""by toJSON"";
注意:這裏的toJSON必須是一個function,若是是別的類型就不行了,好比以前提到的數組。