首页 > 编程知识 正文

赋值浅拷贝深拷贝的区别,深度拷贝和浅度拷贝

时间:2023-05-03 15:13:21 阅读:32039 作者:4050

1 .首先要知道的知识点:

)1) 5种js基本数据类型:编号、字符串、空、未定义、布尔。

name和value都存在于堆栈内存中。 例如,var a=1;

当var b=a时,被复制的是a的值,不受a的值变化的影响。

)2)引用数据类型:函数、数组、对象、日期等

name存储在堆栈中,value存储在堆内存中

当var b=a时,b值指示与a值相同的地址,并且受a值变化的影响。

2 .写拷贝是指在b=a的情况下,a的值发生变化,b的值也发生变化;

深拷贝在b=a时,a的值变化,b的值不变化。

3 .写拷贝的实现方法:

functionshadowcopy(target,source ) for ) varkeyinsource ) if ) source.hasownproperty (key ) target (key ) source ) hasource }var obj1={}var obj2={a:1,b : { c :3 } } obj1=shadow copy (obj 1,obj2) obj1. b.c=0console.log } obj

4 .深度复制的实现方法

(1)递归赋值:

functiondeepcopy(target,source ) target=array.isarray ) source? []3360{}for(varkinsource ) if (type of source ) k )==='object ' ) { target [ k ]=deepcopy ] target,source [ k ]

(2) JSON.parse (JSON.stringify (obj ) )

JSON.stringify () :将js对象转换为字符串;

Jon.parse(3360将字符串转换为js对象。

示例:

var obj1={}var obj2={a:1,b : { c :3 } } obj1=JSON.parse (JSON.stringify (obj2) )缺点: JSON.parse

5.object.assign(target,source ) : object的本机属性,

如果目标对象的属性具有相同的键,则源对象的属性将复盖该属性。 后面源对象的属性将被复盖,就像前面源对象的属性一样。

Object.assign ()第1级属性是深拷贝,其他属性是轻拷贝。

以下是示例。

var obj1={ a :2 } var obj2={ a :1,b : { c :3 } } obj1=object.asign (obj 1,obj2) obj1.b.c=0; //c属于二次属性console.log(obj1,obj2)

注意:如果只有一个参数,则Object.assign直接返回该参数。 如果参数不是对象,则将其转换为对象,然后返回。

Object.assign ()其中,undefined和null不能转换为对象

typeofobject.assign(2)//“number”console.log (object.assign ) )//错误报告

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。