zoukankan      html  css  js  c++  java
  • 关于 js 对象 转 字符串 和 深拷贝 的探讨

    随着更多语言的支持 **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.未处理字符转意,对象属性可能包含与描述冲突的字符如“”等。

  • 相关阅读:
    哇,博客开通啦
    前端与后端数据交互的方式之ajax
    apply()方法和call()方法
    元素居中的方法
    JS中兼容问题的汇总
    关于元素尺寸问题的汇总
    小案例之随机点名系统
    圣杯布局与双飞翼布局
    js自动分页加载所有数据
    浏览器工作流程
  • 原文地址:https://www.cnblogs.com/allofalan/p/10082480.html
Copyright © 2011-2022 走看看