欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

js实现浅拷贝和深拷贝

程序员文章站 2022-03-07 10:17:30
实现浅拷贝和深拷贝 1. 浅拷贝和深拷贝的区别 实现浅拷贝和深拷贝 1. 浅拷贝和深拷贝的区别 简单点说,浅拷贝拷贝完后,修改拷贝的内容可能会对源内容产生影响。而深拷贝就是拷贝前后的内容相互不影响。 那为什么拷贝前后的内容会相互影响呢? 那就得知道基本类型和引用类型的区别了。 基本类型:自然不用说了 ......

实现浅拷贝和深拷贝

1. 浅拷贝和深拷贝的区别

      简单点说,浅拷贝拷贝完后,修改拷贝的内容可能会对源内容产生影响。而深拷贝就是拷贝前后的内容相互不影响。

那为什么拷贝前后的内容会相互影响呢?

那就得知道基本类型和引用类型的区别了。

  • 基本类型:自然不用说了,它的值就是一个数字,一个字符或一个布尔值。
  • 引用类型:是一个对象类型,值是什么呢?它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。

而在js中,有三大引用类型即object、array、function。

因此在拷贝他们的时候,应该使用深拷贝来避免于源内容产生影响。

2.实现浅拷贝

2.1 object.assign()

 object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

var target = { a: 1, b: 2 };
var source = { b: 4, c: 5 };

var returnedtarget = object.assign(target, source);

console.log(target);
//output:  { a: 1, b: 4, c: 5 }

console.log(returnedtarget);
//output: { a: 1, b: 4, c: 5 }

3.实现深拷贝

3.1 json

var arr = [1, [7, [9]], {a:'1'} , function(){}, null, undefined, nan];
var result = json.parse(json.stringify(arr));
console.log(arr); //output: [1, [7, [9]], {a:'1'} , function(){}, null, undefined, nan];
console.log(result); //output: [1, [7,[9]], {a:'1'}, null, null, null, null]

所以可以看出,使用json不能实现对function、undefined、nan的拷贝。