前端对象转字符串能够应用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"  }}"