资讯专栏INFORMATION COLUMN

关于 js 对象 转 字符串 和 深拷贝 的 探讨

edgardeng / 2979人阅读

摘要:项目需要,简单的提了个思路,将对象转换为显示声明形式的字符串例如对象声明可以采用形式,所以,采用此格式存储对象,可以用方法,直接转换为对象。未处理字符转意,对象属性可能包含与描述冲突的字符如等。

随着更多语言的支持 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

相关文章

  • 前端入坑体验与分享

    摘要:同源策略同源策略是一种约定,由公司年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到等攻击。 一、Vue变化检测 背景 初始化对象,属性未知;某些事件触发时,对象改变(新增属性),Vue监听不到 原因 Vue.js 不能检测到对象属性的添加或删除,因为Vue.js 在初始化实例时将属性转为 getter/setter,所以属性必须在 dat...

    hss01248 评论0 收藏0
  • 个人小结--javascript实用技巧写法建议

    摘要:类似的情况还有,方法和方法等。今天我说一个最简单。代码如下和也可以实现,但是生成的是一个整数,如下分割线其它类型数据转布尔数据下面的转换,大家一看就明白了,不多说。缓存变量循环缓存分割线第一段就是每一次循环的时候,都要查询一次。 1.前言 从大学到现在,接触前端已经有几年了,感想方面,就是对于程序员而言,想要提高自己的技术水平和编写易于阅读和维护的代码,我觉得不能每天都是平庸的写代码,...

    WilsonLiu95 评论0 收藏0
  • js拷贝拷贝入理解

    摘要:举个例子来说明一下什么是浅拷贝什么是深拷贝浅拷贝得出的结果可以看出是浅拷贝非对象的属性值一个改变不影响另一个的值对象属性是引用赋值所以一个改变会影响另一个的改变出现这种情况的本质是对象是按引用赋值的深拷贝指的是拷贝一个对象,改变一个值不影响 举个例子来说明一下什么是浅拷贝什么是深拷贝 浅拷贝 var x = { a: 1, b: {f: { g: 1 ...

    lastSeries 评论0 收藏0
  • 专题

    摘要:专题安全攻防专题跨站脚本攻击,原理利用系统漏洞,将具有恶意攻击行为的可执行脚本植入系统,且会自动执行。 专题 /* * web安全攻防专题 * ------------------------------------------------------------------------ * xss:跨站脚本攻击(XSS,Cross-site scripting) * * * 1、...

    Leck1e 评论0 收藏0
  • JS类型

    摘要:中是确定的,是的引用后面,变成的引用,但中的是确定的,所以在中又加上了深拷贝方法方法一如果这样写,对象中的简单类型是深拷贝,而复杂类型是简单拷贝方法二循环引用垃圾回收如果一个对象没有被引用,它就是垃圾,将被引用被赋值后,这个函数不是垃圾 JS 里的类型 number类型转 `string`:`toString`、String()全局函数、加上空字符串 `boolean:Boolean(...

    calx 评论0 收藏0

发表评论

0条评论

edgardeng

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<