JS中的JSON(推出对象深拷贝)

这篇博客详细介绍了JSON的用途,作为数据交换格式在网络传输中的应用。文中通过实例展示了如何使用JavaScript的parse()和stringify()方法进行JSON解析和序列化。同时,讨论了对象深拷贝的问题,提供了一种解决方法,避免了浅拷贝导致的引用问题。此外,还给出了一个递归实现的对象深拷贝函数,能处理包括日期、正则表达式、数组和复杂对象在内的数据类型。
摘要由CSDN通过智能技术生成

全称:JavaScript Object Notation

JSON是一个字符串,常常用于网络传输数据的一种字符串格式

常见的字符串格式:
querystring查询字符串“name=karen&pwd=abc123&count=20"

template模板字符串`<div styLe="">666</div>`
JSON    json字符串‘{"name " : " karen" , "its" : [ "heLLo" , "h5"]}’


JSON解析

parse()方法 把字符串解析为对象

反解析 stringify() 把对象解析为字符串

代码展示:

<script>
            var re="JSON数据"
            var obj=JSON.parse(re)
			console.log(re,obj)
            //"JSON数据" JSON数据
			var obj={name:"karen"}
            console.log(obj)
            //{name:"karen"}
			var str=JSON.stringify(obj)
			console.log(str)
            //{"name":"karen"}
</script>

推出对象深拷贝1(如果内部没有引用数据或者时间正则null等等数据时)

要求让obj2对象与obj={name : "karen"}长得一样,但是他们不是同一个对象,不能写obj2={name : "karen"}

<script>
    	    var obj={name:"karen"}	
            //错误方法:		
		    var obj2={}
			obj2.name=obj.name	
            console.log(obj2,obj==obj2)//true
            //指向的还是同一块内存空间
		    //正确方法:
			var str=JSON.stringify(obj)//'{"name":"karen"}'	
		    var obj2=JSON.parse(str)//{name:"karen"}	
			console.log(obj2,obj==obj2)//{name:"karen"}  //false
</script>

对象深拷贝2

<script>
                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 Array()
						   for(var i=0;i<data.length;i++){
							   var temp=data[i]					   
							   newArray.push(arguments.callee(temp))
						   }
					 	   return newArray
					 }
					 else{
						 var newobj=new data.constructor() //new Object()
						 // Object.keys()
						 for (var key in data) {							
						 	newobj[key]=arguments.callee(data[key])
						 }
						 return newobj
					 }
				 }
				 else{
					return data 
				 }
			}
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值