php深层理论知识太浅,JS中浅度克隆和深度克隆有什么区别

news/2024/7/4 10:12:53

本文章分享的是JavaScript中一个重要的知识点克隆,具有一定的参考价值,希望对大家的学习有所帮助

JavaScript中克隆分为两种:浅度克隆和深度克隆,都是先对值遍历一遍判断是原始值还是引用值,原始值直接复制,引用值先判断是对象还是数组再进行克隆

原始值:像Undefined,Null,Boolean,Number和String值被称为原始值

引用值:像对象数组函数等值称为引用值

浅度克隆

主要是将数据的地址赋给对应的变量但并没有将具体的值赋值给对应的变量,变量会随着数据的改变而改变

var obj={

name:"张三",

age:18,

sex:"male",

grade:[' Math:90','English:88','Chinese:80']

}

var obj1={}

function clone(origin,target){

var target=target||{};

for(var prop in origin){

target[prop]=origin[prop];

}//防止用户不传target对象,给了参数就直接用,不给就当空对象,

return target;

}

clone(obj,obj1);

结果

a7e0a405deee5c7bbda253c59118cb3c.png

obj1将obj的值克隆过来了,当给obj的grade添加值时,obj1的grade的值也随之改变了

深度克隆

是将数据赋值给相对应的变量,所以产生了一个新的数据也就有了新的地址,原数据的改变不会影响新数据

var obj={

name:"张三",

age:18,

sex:"male",

grade:[' Math:90','English:88','Chinese:80']

}

var obj1={}

function deepClone(origin,target){

var target=target||{},

toStr=Object.prototype.toString,//简化代码

arrStr="[Object Array]";

for(var prop in origin){//从原始 origin 拷贝到 target

if(origin.hasOwnProperty(prop)){///先判断是不是原型上的属性,如果是false 就是原型上的

{

if(typeof(origin[prop])!== "null" && typeof (origin[prop]) =='object')

{

if(toStr.call(origin[prop])==arrStr){

target[prop]=[];

}//数组对象

else{

target[prop]={};

}//对象

//

deepClone(origin[prop],target[prop]);

}

else{

target[prop]=origin[prop];

}

}

}

return target;

}

结果

b995c1a7f1797da00cb33a1d5d01695d.png

obj1将obj的值克隆过来了,当给obj的grade添加值时,obj1的grade的值不会改变

总结:以上就是本篇文章所写的内容了,希望对大家学习有所帮助。


http://www.niftyadmin.cn/n/3571274.html

相关文章

勘探重力实验matlab,重力场与重力勘探实验指导.ppt

重力场与重力勘探实验指导.ppt 重力场与重力勘探实验指导,实验一、重力仪认识操作,一、实验目的 了解掌握金属弹簧重力仪的测量原理; 学习操作金属弹簧重力仪,了解金属弹簧重力仪的工作范围、操作步骤、性能特点等,为实际野外重力测量实习奠定…

CentOS6.6环境下布署LVS+keepalived

CentOS6.6 环境下布署LVSkeepalived 环境: 操作系统 Centos 6.6 _X64 WEB nginx 结构: LVS-MASTER:10.6.1.210 LVS-BACKUP: 10.6.1.211 LVS-VIP: 192.168.1.214 Realsever: 10.6.1.212,10.6.1.213 一.Keepalive…

txt命名为matlab文件,matlab导入

读入以逗号分隔的数据csvwrite将数据写入文件,数据间以逗号分隔dlmread将以 ASCII 码分隔的数值数据读入到矩阵中dlmwrite将矩阵数据写入到文件中,以 ASCII 分隔textread从文本文件中读入数据,将结果分别保存textscan从文本文件中读入数据&am…

if or函数套用_4个函数,5种方法,6个案例,条件判定原来是这么简单

第一种方法:IF函数对一种条件进行判定,根据条件是否成立输出两种不同的结果,即:IF(logical-test,[value-if-true],[value-if-false])或IF((测试条件,真值,假值)。例如:购买数量大于等…

Linux服务器搭建jdk环境

为什么80%的码农都做不了架构师?>>> ##Linux服务器搭建jdk环境 对于jdk的安装我们有两个选择,一个是open jdk,一个是oracle jdk,要说这两个的区别,自行百度,个人感觉用起来差不多,但…

大学不教php,为什么大学普遍只教学生 C 语言?

“大学只教C语言,需不需要自学一些其他的技术?”“大学里为什么不教 PHP,Swift 或者 Python 这些真正实用的语言?”... ...在知乎上经常可以看到这样的问题。这也不能单纯怪学生们浮躁,现在工业界的技术日新月异&#…

mysql的三方Infobright数据仓库BRIGHTHOUSE引擎

Infobright是MYSQL三方专用数据分析引擎,专门针对亿级以上的数据查询,而且查询速度是MYSQL的MyISAM,InnoDB的5~60倍,该引擎可以说是每个字段都建立了各种索引, 下载地址 https://www.infobright.org/ 安装与使用:http:…

java 长按事件,RecyclerView 点击事件和长按事件

在Adapter适配器中设置public void onBindViewHolder(Adapter.MyHolder holder, int position) {holder.img.setImageResource(list.get(position).getImg());holder.tv1.setText(list.get(position).getName());holder.tv2.setText(list.get(position).getText());holder.line…