前端对象转字符串可以使用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"
  }
}"

赵恩迟
112 声望2 粉丝