前端对象转字符串可以使用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"
}
}"
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。