9

因为对象转为JSON时JSON.stringify()会把function过滤掉,那么我们就把function转为字符串在去处理就能够达到要求了

const page={
  version: "8.0.0.0", showCount: 5, id: "newTab483617", name: "",
  a:function(){console.log(12321)}
}
//对象转换为json
const str=JSON.stringify(page,function(key,val){
  if (typeof val === 'function') {
    return val + '';
  }
  return val;
})
console.log(str)

json转回对象的时候因为function都被处理成字符串了,那么我们要把字符串转为function,这里我们使用eval 把字符串转成function

const page={
  version: "8.0.0.0", showCount: 5, id: "newTab483617", name: "",
  a:function(){console.log(12321)}
}
//对象转换为json
const str=JSON.stringify(page,(key,val)=>{
  if (typeof val === 'function') {
    return val + '';
  }
  return val;
})
console.log(str)

// json字符串转换成对象
var json = JSON.parse(str,(k,v)=>{
  if(v.indexOf && v.indexOf('function') > -1){
     return eval("(function(){return "+v+" })()")
  }
  return v;
})
console.log(json)
json.a()  //打印12321 成功转回

playboy5566
3.1k 声望1.2k 粉丝

一个一直在坑里面的前端小学生