如何实现JSON对象深拷贝而非引用传递?

2026-04-06 10:511阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计278个文字,预计阅读时间需要2分钟。

如何实现JSON对象深拷贝而非引用传递?

在JavaScript中,若复制的是基本类型,直接赋值即可;若复制的是引用类型,赋值时实际上是创建了原对象的引用传递,原对象变化时,复制对象也会跟着变化。

在Javascript里,如果拷贝对象是基本类型,我们直接赋值就可以了;如果不是基本类型,那么赋值时其实只是做了引用传递,当原对象改变时拷贝对象将会一同变化。该方法提供了针对JSON对象的拷贝功能。经实测后发现当被拷贝的JSON对象属性值为基本类型,数组或函数时默认为拷贝,当属性值为JSON对象时默认为引用传递,故针对其递归调用拷贝,而其他为直接赋值。

1.[代码]对JSON对象进行深拷贝,而不是进行引用传递

/** * 对JSON对象进行深拷贝,而不是进行引用传递 * @param obj 待拷贝的JSON对象 */ copyJsonObj: function(obj) { if(!!obj && typeof(obj) == "object") { var copyObj = {}; for(var field in obj) { if(typeof(obj[field]) == "object") { copyObj[field] = copyJsonObj(obj[field]); }else { copyObj[field] = obj[field]; } } return copyObj; } return obj; }

如何实现JSON对象深拷贝而非引用传递?

本文共计278个文字,预计阅读时间需要2分钟。

如何实现JSON对象深拷贝而非引用传递?

在JavaScript中,若复制的是基本类型,直接赋值即可;若复制的是引用类型,赋值时实际上是创建了原对象的引用传递,原对象变化时,复制对象也会跟着变化。

在Javascript里,如果拷贝对象是基本类型,我们直接赋值就可以了;如果不是基本类型,那么赋值时其实只是做了引用传递,当原对象改变时拷贝对象将会一同变化。该方法提供了针对JSON对象的拷贝功能。经实测后发现当被拷贝的JSON对象属性值为基本类型,数组或函数时默认为拷贝,当属性值为JSON对象时默认为引用传递,故针对其递归调用拷贝,而其他为直接赋值。

1.[代码]对JSON对象进行深拷贝,而不是进行引用传递

/** * 对JSON对象进行深拷贝,而不是进行引用传递 * @param obj 待拷贝的JSON对象 */ copyJsonObj: function(obj) { if(!!obj && typeof(obj) == "object") { var copyObj = {}; for(var field in obj) { if(typeof(obj[field]) == "object") { copyObj[field] = copyJsonObj(obj[field]); }else { copyObj[field] = obj[field]; } } return copyObj; } return obj; }

如何实现JSON对象深拷贝而非引用传递?