摘要:项目需要,简单的提了个思路,将对象转换为显示声明形式的字符串例如对象声明可以采用形式,所以,采用此格式存储对象,可以用方法,直接转换为对象。未处理字符转意,对象属性可能包含与描述冲突的字符如等。
随着更多语言的支持 json 作为数据传输和存储的媒体,已经非常成熟且应用广泛。
却存在致命硬伤,不携带 对象方法 。在数据传输和存储中,这是恰当的和合理的。
但是在更多的应用场景中,又是无奈的。
项目需要,简单的提了个思路,将对象转换为显示声明形式的字符串
例如:
var person = { name:"joe", age:40, send:function(){ console.log("hello world") } }
对象声明可以采用{...}形式,所以,采用此格式存储对象,可以用eval()方法,直接转换为对象。
简单写了一个,大概思路如此:
function o2s(o){ var r = [] for(p in o){ if(typeof o[p] == "string"){ r.push((Array.isArray(o)?""": p + ":"") + o[p] + """) }else if(typeof o[p] == "object"){ r.push((Array.isArray(o)?"":p + ":" )+ o2s(o[p])) }else{ r.push((Array.isArray(o)?"":p + ":") + o[p] ) } } r = r.join(",") if(Array.isArray(o)){ return "[" + r + "]" }else if(typeof o == "object"){ return "{" + r + "}" }else{ return r } }
捎带一句,稍微修改即可深拷贝
存在几个问题,
1.无法处理循环引用的对象,也就是自己包含自己,或者包含了包含自己的对象的时候。
2.未处理字符转意,对象属性可能包含与描述冲突的字符如“”等。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/99799.html
摘要:类似的情况还有,方法和方法等。今天我说一个最简单。代码如下和也可以实现,但是生成的是一个整数,如下分割线其它类型数据转布尔数据下面的转换,大家一看就明白了,不多说。缓存变量循环缓存分割线第一段就是每一次循环的时候,都要查询一次。 1.前言 从大学到现在,接触前端已经有几年了,感想方面,就是对于程序员而言,想要提高自己的技术水平和编写易于阅读和维护的代码,我觉得不能每天都是平庸的写代码,...
摘要:举个例子来说明一下什么是浅拷贝什么是深拷贝浅拷贝得出的结果可以看出是浅拷贝非对象的属性值一个改变不影响另一个的值对象属性是引用赋值所以一个改变会影响另一个的改变出现这种情况的本质是对象是按引用赋值的深拷贝指的是拷贝一个对象,改变一个值不影响 举个例子来说明一下什么是浅拷贝什么是深拷贝 浅拷贝 var x = { a: 1, b: {f: { g: 1 ...
阅读 2306·2023-04-25 14:17
阅读 1514·2021-11-23 10:02
阅读 2169·2021-11-23 09:51
阅读 872·2021-10-14 09:49
阅读 3383·2021-10-11 10:57
阅读 2921·2021-09-24 09:47
阅读 3045·2021-08-24 10:00
阅读 2297·2019-08-29 18:46