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