JavaScript中的JSON字符串以及对象深拷贝

1、JSON字符串

理解JSON字符串

JSON是一个字符串,常常用于网络传输数据的一种字符串格式
JSON字符串——> ‘{“name”:“karen”,“its”:[“hello”,“h5”]}’

var re = '{"name":"karen","its":["hello","h5"]}'
 console.log(typeof re);

结果:在这里插入图片描述

2、JSON解析

①JSON数据—>对象
   var re = '{"name":"karen","its":["hello","h5"]}'
        var obj = JSON.parse(re)
        console.log(obj);

结果:在这里插入图片描述

②对象—>JSON数据
    var obj = {
            name: "fsefsf",
            age: 20
        }
        var JSON1 = JSON.stringify(obj)
        console.log(JSON1, typeof JSON1);

结果:在这里插入图片描述

3、对象深拷贝

①对象深拷贝1
var obj = {
            name: "karen"
        }
        var str = JSON.stringify(obj) // '{name: "karen"}'
        var obj2 = JSON.parse(str)
        console.log(obj2, obj == obj2); //{name:"karen"} false

结果:在这里插入图片描述

②对象深拷贝2
第一种方法
  var obj = {
            x1: null,
            x2: new Date(),
            x3: "hello",
            son: {
                age: 20
            }
        }
        var obj2 = JSON.parse(JSON.stringify(obj))
        console.log(obj);
        console.log(obj2); //时间数据类型会发生改变

结果:在这里插入图片描述

第二种方法
      var obj = {
            x1: null,
            x2: new Date(),
            x3: "hello",
            son: {
                age: 20
            }
        }

        function deepcopy(data) {
            if (typeof (data) == "Object") {
                if (data.constructor == Date) {
                    return new Date(data.getTime())
                } else if (data == null) {
                    return null
                } else if (data.constructor == RegExp) {
                    return new RegExp(data)
                } else if (data.constructor == Array) {
                    var newArray = new data.constructor()
                    //用new Array()会造成原型链的方法丢失,所以要用同一个构造函数
                    for (var i = 0; i < data.length; i++) {
                        var temp = data[i]
                        newArray.push(arguments.callee(temp))
                        //当data[i]又为数组时自调用
                    }
                    return newArray
                } else {
                    var newobj = new data.constructor()
                    //用new Object()会造成原型链的方法丢失,所以要用同一个构造函数
                    // Object.keys()//遍历对象
                    for (var key in data) {
                        // newobj[key] = deepcopy(data[key])
                        newobj[key] = arguments.callee(data[key]) //自调用
                    }
                    return newobj
                }
            } else {
                return data
            }
        }
        var obj2 = deepcopy(obj)
        console.log(obj2, obj == obj2, obj[3] == obj2[3])
        console.log(obj2, obj == obj2, obj.its == obj2.its)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值