JS对象深拷贝

WEB前端

Vue最独特的特性之一,是其非侵入性的响应式系统。数据模型仅仅是普通的 JavaScript 对象。而当你修改它们时,视图会进行更新。这使得状态管理非常简单直接。在有些特定的时候,我们希望修改数据,并不影响原数据的时候。因为对象是引用类型,我们就要用深拷贝复制一个变量。深拷贝是能拷贝对象中的对象,而不会对原对象产生影响。下面PHP程序员雷雪松就详细的介绍一下JS对象深拷贝的两种方法。

一、递归复制Json对象的值

1
2
3
4
5
6
7
function copy(json){//采用递归的方法
var object= {};
for(var o in json){
object[o] =typeof json[o] === "object"? copy(json[o]) :json[o];//若是里边有对象,再次调用copy方法
}
return object;
}

二、把JSON对象转成字符串,在装成对象。因为字符串是值类型

1
var object=JSON.parse(JSON.stringify(json));//json和objec就是两个独立的对象了,各自的更改不会相互影响。

大家感兴趣的话可以看一下PHP程序员雷雪松的博客中的这篇文章《JS中的值类型和引用类型详解》,看完就很清楚什么是值类型和引用类型以及为什么需要深拷贝来复制一个相互独立互不影响的对象啦。

来源:JS对象深拷贝

发表评论

电子邮件地址不会被公开。 必填项已用*标注