js 改写对象转字符串 字符串转对象(不丢失对象方法)
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 改写对象转字符串 字符串转对象(不丢失对象方法)相关推荐
- 字符串对象转数组对象_js对象转数组的方法 js怎么将数组对象转变成字符串
只需要一句,arr.__proto__=[];但是要注意浏览器支持__proto__才行,最新的浏览器应该都支持. 以下两种都可以解决此问题: function transform(obj){ var ...
- JS对象和JSON字符串相互转化总结
在web开发中,一般情况下需要前端和服务器的交换数据,我们一般使用JSON来完成数据的传输,JavaScript操作的对象是一般是变量:因此我们需要将JSON字符串转换为JS变量,下面总结JS对象和J ...
- tinydate.js[v0.3] 新增了字符串格式化为日期对象的函数
更新说明 加入了String类型的扩展成员 convertToDate() 可以直接将 字符串格式的日期转换为Date对象. 加入了String类型的扩展成员 convertToTimeSpan() ...
- js对象(Object)和字符串(String)互转 - 代码篇
文章目录 js对象(Object)和字符串(String):相互转化 1. 利用原生JSON对象,将对象转为字符串 截图如下: 2. 从JSON字符串转为对象 相关文章:[localstorage本地 ...
- js字符串转换为json对象JSON.parse()及将json对象转为json字符串JSON.stringify()
一.JSON对象中有两个非常好用的方法: 1 JSON.stringify接收一个JS对象转化为json字符串 2 JSON.parse接受json字符串转化为JS对象 const my={ name ...
- JS 对象(Object)和字符串(String)互转方法
将JS对象转为JSON字符串 :JSON.stringify(jsObj) var jsObj = {}; jsObj.testArray = [1,2,3,4,5]; jsObj.name = 'C ...
- js字符串怎么转python对象_python对象与json相互转换的方法 python中怎么把json对象转成字符串...
在python中 如何实现将一个json字符串转化为对象 对象?json不能包含对象, 只能包含基本的数据类型, 键值对, 列表, 数字, 字符串等等 import jsond = {"k& ...
- js中自定义对象、json对象、json字符串、普通js对象 --js学习那本书上的
4.7 自定义对象 JS除了内置对象之外,还允许我们程序自己定义属于我们自己的对象,在JS中自定义对象的方式有2种:通过构造器创建对象,通过初始化器创建对象. 4.7.1 构造器创建对象(原生JS对象 ...
- js中自定义对象、json对象、json字符串、普通js对象
4.7 自定义对象 JS除了内置对象之外,还允许我们程序自己定义属于我们自己的对象,在JS中自定义对象的方式有2种:通过构造器创建对象,通过初始化器创建对象. 4.7.1 构造器创建对象(原生JS对象 ...
最新文章
- 人脸识别门禁_门禁人脸识别系统铜陵县门禁人脸识别系统哪家好
- 从“上云”到“云管理”,中国首个多云管理平台评估标准有何妙处
- leetcode-136-只出现一次的数字
- 使用C#获取IP地址方法
- 第46讲:遇到动态页面怎么办?详解渲染页面爬取
- ec6110刷linux系统,华为EC6110-T优盘强刷固件升级包及刷机教程
- 有关机械手臂控制中的两个重要输入参数
- Net5 已经来临,让我来送你一个成功
- 成为Java流大师–第3部分:终端操作
- 2019年京东Java研发岗社招面经(面试经历+真题总结+经验分享)!
- myEclipse配置java版本(环境、项目、编译)
- 播放失败,请在设置中切换输出设备(后续)
- win7笔记本蓝牙连接蓝牙耳机设备,无法播放音乐,听不见声音
- matlab向量的简单随机抽样,matlab随机抽样
- 6-7-Isomorphic-函数题
- 苹果icloud登录_如何在Windows电脑上使用苹果iCloud服务?
- 操作系统实验——模拟动态分区首次适应分配和回收算法
- Flink DataStream API(基础版)
- Matlab之随机森林TreeBagger
- Android 拍照:如何使用已有相机应用捕获图片(Taking Photos Simply
热门文章
- The lsof command
- 大彩串口屏使用笔记【DC80480M043_1111_0C】
- 禁用百度, 从我做起
- oppo手机上的系统应用shelper杀应用导致应用疑似奔溃
- 第三章 使用 matplotlib 绘制直方图
- Bert4Rec代码报错Invalid argument: Key: XXX. Can‘t parse serialized Example.
- java 怎么启动多线程_了解Java多线程及如何创建和启动多线程?
- mysql字符串排序
- 计算机专业学习内容,计算机专业热门院校 计算机专业学习内容
- callable python中意义,Python之callable