js 改写对象(包括方法)转字符串

  • 对象转字符串
  • 字符串转对象
  • 总结

js中将对象转化为字符串可以用JSON.stringify,字符串转对象可以用JSON.parse。这两个方法在大部分的情况下都很好用,但是这两个方法在进行字符串转换的时候,会丢失对象中的方法。我们有时候会想要保留对象中的方法,这就需要进行一些额外的操作。

对象转字符串

对象转字符串要保留函数的思路是将对象中的函数转化为字符串,然后再调用JSON.stringify将更改过的对象转化为字符串。方法如下:

// 返回一个将对象中的函数都转化为字符串的对象 不直接在原对象上面改
function stringifyFunction(obj){ let newobj = JSON.parse(JSON.stringify(obj))for(let key in obj){ if(obj[key] instanceof Function){  newobj[key] = obj[key].toString().replace(/[\n\t]/g,"");continue;} if(obj[key] instanceof Object){  newobj[key] = stringifyFunction(obj[key]);}} return newobj;
}function objectToString(obj){  // 用于替代JSON.stringify函数let _object = stringifyFunction(obj);  // 将对象中的函数转为字符串return JSON.stringify(_object)  // 将对象转为字符串
}

字符串转对象

思路主要是先用JSON.parse将字符串转为对象,然后使用正则表达式匹配对象中的属性,找出函数字符串使用Function对象转为函数。方法如下:

function stringToFunction(obj){  // 将对象中的函数字符串转化为函数var regex =  /^((function\s)|.)([a-zA-Z_][a-zA-Z0-9_]*)\(.*\)\s\{.*\}/  //匹配函数字符串for(let key in obj){if(obj[key] instanceof Object){stringToFunction(obj[key]);}else{if(regex.test(obj[key])){ // 是一个函数try{let params = obj[key].substring(obj[key].indexOf('(')+1,obj[key].indexOf(')'));let operation = obj[key].substring(obj[key].indexOf("{")+1,obj[key].length-1);obj[key] = new Function(params, operation);}catch(e){console.log(e)}}}}return obj
}function stringToObject(string){  // 用于替代JSON.parselet obj = JSON.parse(string);  //将字符串转为对象return stringToFunction(obj)    // 将对象中的函数字符串转为函数
}

总结

修改以后的两个函数在对象没有方法的时候,与原本的JSON.stringify以及JSON.parse是一样的,仅单独对属性为方法的情况进行处理。

js 改写对象转字符串 字符串转对象(不丢失对象方法)相关推荐

  1. 字符串对象转数组对象_js对象转数组的方法 js怎么将数组对象转变成字符串

    只需要一句,arr.__proto__=[];但是要注意浏览器支持__proto__才行,最新的浏览器应该都支持. 以下两种都可以解决此问题: function transform(obj){ var ...

  2. JS对象和JSON字符串相互转化总结

    在web开发中,一般情况下需要前端和服务器的交换数据,我们一般使用JSON来完成数据的传输,JavaScript操作的对象是一般是变量:因此我们需要将JSON字符串转换为JS变量,下面总结JS对象和J ...

  3. tinydate.js[v0.3] 新增了字符串格式化为日期对象的函数

    更新说明 加入了String类型的扩展成员 convertToDate() 可以直接将 字符串格式的日期转换为Date对象. 加入了String类型的扩展成员 convertToTimeSpan() ...

  4. js对象(Object)和字符串(String)互转 - 代码篇

    文章目录 js对象(Object)和字符串(String):相互转化 1. 利用原生JSON对象,将对象转为字符串 截图如下: 2. 从JSON字符串转为对象 相关文章:[localstorage本地 ...

  5. js字符串转换为json对象JSON.parse()及将json对象转为json字符串JSON.stringify()

    一.JSON对象中有两个非常好用的方法: 1 JSON.stringify接收一个JS对象转化为json字符串 2 JSON.parse接受json字符串转化为JS对象 const my={ name ...

  6. JS 对象(Object)和字符串(String)互转方法

    将JS对象转为JSON字符串 :JSON.stringify(jsObj) var jsObj = {}; jsObj.testArray = [1,2,3,4,5]; jsObj.name = 'C ...

  7. js字符串怎么转python对象_python对象与json相互转换的方法 python中怎么把json对象转成字符串...

    在python中 如何实现将一个json字符串转化为对象 对象?json不能包含对象, 只能包含基本的数据类型, 键值对, 列表, 数字, 字符串等等 import jsond = {"k& ...

  8. js中自定义对象、json对象、json字符串、普通js对象 --js学习那本书上的

    4.7 自定义对象 JS除了内置对象之外,还允许我们程序自己定义属于我们自己的对象,在JS中自定义对象的方式有2种:通过构造器创建对象,通过初始化器创建对象. 4.7.1 构造器创建对象(原生JS对象 ...

  9. js中自定义对象、json对象、json字符串、普通js对象

    4.7 自定义对象 JS除了内置对象之外,还允许我们程序自己定义属于我们自己的对象,在JS中自定义对象的方式有2种:通过构造器创建对象,通过初始化器创建对象. 4.7.1 构造器创建对象(原生JS对象 ...

最新文章

  1. 人脸识别门禁_门禁人脸识别系统铜陵县门禁人脸识别系统哪家好
  2. 从“上云”到“云管理”,中国首个多云管理平台评估标准有何妙处
  3. leetcode-136-只出现一次的数字
  4. 使用C#获取IP地址方法
  5. 第46讲:遇到动态页面怎么办?详解渲染页面爬取
  6. ec6110刷linux系统,华为EC6110-T优盘强刷固件升级包及刷机教程
  7. 有关机械手臂控制中的两个重要输入参数
  8. Net5 已经来临,让我来送你一个成功
  9. 成为Java流大师–第3部分:终端操作
  10. 2019年京东Java研发岗社招面经(面试经历+真题总结+经验分享)!
  11. myEclipse配置java版本(环境、项目、编译)
  12. 播放失败,请在设置中切换输出设备(后续)
  13. win7笔记本蓝牙连接蓝牙耳机设备,无法播放音乐,听不见声音
  14. matlab向量的简单随机抽样,matlab随机抽样
  15. 6-7-Isomorphic-函数题
  16. 苹果icloud登录_如何在Windows电脑上使用苹果iCloud服务?
  17. 操作系统实验——模拟动态分区首次适应分配和回收算法
  18. Flink DataStream API(基础版)
  19. Matlab之随机森林TreeBagger
  20. Android 拍照:如何使用已有相机应用捕获图片(Taking Photos Simply

热门文章

  1. The lsof command
  2. 大彩串口屏使用笔记【DC80480M043_1111_0C】
  3. 禁用百度, 从我做起
  4. oppo手机上的系统应用shelper杀应用导致应用疑似奔溃
  5. 第三章 使用 matplotlib 绘制直方图
  6. Bert4Rec代码报错Invalid argument: Key: XXX. Can‘t parse serialized Example.
  7. java 怎么启动多线程_了解Java多线程及如何创建和启动多线程?
  8. mysql字符串排序
  9. 计算机专业学习内容,计算机专业热门院校 计算机专业学习内容
  10. callable python中意义,Python之callable