前端对象转字符串能够应用JSON.stringify,其中stringify除了传入obj,还能够额定的传入两个参数。
第一个参数
var data = {name:"niuzai",info:{age:18,sex:"male"}};JSON.stringify(data); //{"name":"niuzai","info":{"age":18,"sex":"male"}}
应用JSON.stringify的时候有两点须要留神,第一点是不能保障程序,第二点是函数不会被序列化
第二个参数
第二个参数能够是回调函数replacer或者数组
回调函数
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//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"}}"
tips:如果对象中含有Set、Map之类的数据,序列化后会变成{},咱们能够在replacer回调函数中将其转换,不可转换的状况请参考MDN
数组
在数组中的字段才会被序列化
JSON.stringify(data, ["name", "info", "sex"]);// age因为不在列表里,所以没被序列化// "{"name":"niuzai","info":{"sex":"male"}}"
第三个参数
第三个参数能够用来格式化转换之后的成果,比方想格式化之后想放弃原来的缩进,那么能够加个数字2或者4,最多10个,也能够跟字符串(蕴含制表符或者换行符之类)
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" }}"