已经有了网站源代码怎样搭建,福田祥菱m1图片及报价,wordpress主题栏是什么,站斧浏览器1、浅拷贝和深拷贝的定义
1.1、浅拷贝
有两种方式#xff0c;一种是把一个对象里面的所有的属性值和方法都复制给另一个对象#xff0c;另一种是直接把一个对象赋给另一个对象#xff0c;使得两个都指向同一个对象。浅拷贝对内存地址的复制#xff0c;让目标对象指针和源…1、浅拷贝和深拷贝的定义
1.1、浅拷贝
有两种方式一种是把一个对象里面的所有的属性值和方法都复制给另一个对象另一种是直接把一个对象赋给另一个对象使得两个都指向同一个对象。浅拷贝对内存地址的复制让目标对象指针和源对象指向同一片内存空间。
1.2、深拷贝
深拷贝是指拷贝对象的具体内容其内存地址是自主分配的拷贝结束之后俩个对象虽然存的值是一样的但是内存地址不一样俩个对象互相不影响互不干涉。
数据类型的值传递和地址传递
JavaScript的数据类型可以分为基本数据类型和引用数据类型 基本数据类型有Number、String、Boolean、Null、Undefined、Symbol 引用数据类型有:Object、Function、Array、Regexp、Date 普通数据类型和对象的存储方式 普通数据类型一般是存储在栈中的而对象一般是存储在堆中的同时在栈中存放了一个地址数据指向堆中的数据。当调用对象时首先会获取栈中的地址根据该地址去堆中找到该对象数据。
针对普通类型在赋值过程中一般是值传递 //Number var num112; var num2num1; num234; console.log(num1,num2);//12,34 //String var str1abc; var str2str1; str2def; console.log(str1,str2);//abc,def 针对引用类型中的对象和数组在赋值过程中一般是地址传递 //对象 var obj1 { name: jack }; var obj2 obj1; //复制obj1的引用 obj2.name mary; //此时obj1和obj2全都指向一个地址修改地址值obj1和obj2的值都会改变 console.log(obj1.name, obj2.name);//mary,mary // [] a [a, b, c]; b a; b[1] d; console.log(a, b) 2、浅拷贝实现的具体方式
2.1、数字方法slice() var arr1 [ { number: 1 }, { number: 2 }, { number: 3 } ]; var arr2 arr1.slice();//复制arr1在栈中的引用地址 arr2[0].number 9//将复制过来的引用地址的指向修改为9所以arr和arr2都会改变 console.log(arr1[0].number, arr2[0].number);//99 原因 arr2拷贝了arr1在栈内存中的地址也就是arr2和arr1共用存储在堆内存的数据同理得当arr2发生改变的时候arr1也会随之改变。 2.2、Object.assign
Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象。 var arr1 [//两层数据 { number: 1 }, { number: 2 }, { number: 3 } ]; var obj1 { name: jack }//一层数据 var obj2 Object.assign({}, obj1);//此时obj1为一层数据复制的是对象中的属性值 obj2.name mary var arr2 Object.assign({}, arr1)//复制的是数组中的对象在栈中的的引用地址 arr2[0].number 99 console.log(obj1.name, obj2.name, arr1[0].number, arr2[0].number);//jack mary 99 99 2.3、for…in…
通过for…in…遍历对象将源对象的值拷贝到另一个对象上并返回另一个对象。浅拷贝只能遍历一层对象当数据是嵌套对象则需要深拷贝。 var qianCopy function (obj) { var result obj.constructor();//声明参数的一个空构造函数 // 遍历对象中的属性及方法 for (var key in obj) { // 判断对象有没有相应的key if (obj.hasOwnProperty(key)) { // 把对象相应key对象的值赋值给另外一个对象相应的key对应的值 result[key] obj[key]; } } return result } var obj1 { name: jack }; var obj2 qianCopy(obj1); //复制obj1的引用 obj2.name mary; //此时obj1和obj2全都指向一个地址修改地址值obj1和obj2的值都会改变 console.log(obj1.name, obj2.name);//jack,mary 3、深拷贝的具体实现
3.1、JSON.parse(JSON.stringify())
JSON.parse(JSON.stringify())一般用于深拷贝JSON.stringify()将JS对象序列化转化为JSON字符串再利用JSON.parse()反序列化将JSON字符串还原成对象。该方法只能用于可枚举属性。 var arr1 [ { number: 1 }, { number: 2 }, { number: 3 } ]; var arr2 JSON.parse(JSON.stringfy(arr1))//此时是将arr1中所有属性的值复制给arr2两者相互独立 arr2[0].number 199 console.log(arr1[0].number, arr2[0].number);//1,199 当然JSON.parse(JSON.stringify())并不是一种完美实现深拷贝的方法存在以下缺陷
1.当深拷贝对象为函数、Undefined时会把函数、Undefined丢失无法拷贝。 2.当深拷贝对象为Regexp、Error对象序列化结果为空对象 3.当深拷贝对象中存在NaN、infinity、-infinity时序列化会变成Null 3.2、递归
面试题使用递归完成深拷贝对象 function shenCopy(obj){ //创建参数的构造函数对象 var resultobj.constructor(); if(typeof obj!Object){//当传入参数不为Object类型时,直接返回该参数 return obj; }else{ for(let key in obj){ //递归核心将嵌套对象递归得到的返回值赋予新建的构造对象 result[key]shenCopy(obj[key]); } } return result; }
文章转载自: http://www.morning.hphrz.cn.gov.cn.hphrz.cn http://www.morning.ztqyj.cn.gov.cn.ztqyj.cn http://www.morning.zmpqh.cn.gov.cn.zmpqh.cn http://www.morning.rqqmd.cn.gov.cn.rqqmd.cn http://www.morning.khtyz.cn.gov.cn.khtyz.cn http://www.morning.madamli.com.gov.cn.madamli.com http://www.morning.qlkzl.cn.gov.cn.qlkzl.cn http://www.morning.qbwyd.cn.gov.cn.qbwyd.cn http://www.morning.gwdnl.cn.gov.cn.gwdnl.cn http://www.morning.xqmd.cn.gov.cn.xqmd.cn http://www.morning.lgwjh.cn.gov.cn.lgwjh.cn http://www.morning.pqhgn.cn.gov.cn.pqhgn.cn http://www.morning.fzlk.cn.gov.cn.fzlk.cn http://www.morning.nqpxs.cn.gov.cn.nqpxs.cn http://www.morning.wdykx.cn.gov.cn.wdykx.cn http://www.morning.wpmqq.cn.gov.cn.wpmqq.cn http://www.morning.jhgxh.cn.gov.cn.jhgxh.cn http://www.morning.wqpsf.cn.gov.cn.wqpsf.cn http://www.morning.ptlwt.cn.gov.cn.ptlwt.cn http://www.morning.tpchy.cn.gov.cn.tpchy.cn http://www.morning.mmxnb.cn.gov.cn.mmxnb.cn http://www.morning.hhpbj.cn.gov.cn.hhpbj.cn http://www.morning.kdhrf.cn.gov.cn.kdhrf.cn http://www.morning.thnpj.cn.gov.cn.thnpj.cn http://www.morning.yuanshenglan.com.gov.cn.yuanshenglan.com http://www.morning.zrdhd.cn.gov.cn.zrdhd.cn http://www.morning.wrqw.cn.gov.cn.wrqw.cn http://www.morning.kdjtt.cn.gov.cn.kdjtt.cn http://www.morning.pycpt.cn.gov.cn.pycpt.cn http://www.morning.qhmhz.cn.gov.cn.qhmhz.cn http://www.morning.nylbb.cn.gov.cn.nylbb.cn http://www.morning.qyfqx.cn.gov.cn.qyfqx.cn http://www.morning.dmcqy.cn.gov.cn.dmcqy.cn http://www.morning.dnqpq.cn.gov.cn.dnqpq.cn http://www.morning.yqtry.cn.gov.cn.yqtry.cn http://www.morning.lizimc.com.gov.cn.lizimc.com http://www.morning.gbyng.cn.gov.cn.gbyng.cn http://www.morning.lkpzx.cn.gov.cn.lkpzx.cn http://www.morning.hgtr.cn.gov.cn.hgtr.cn http://www.morning.qkgwz.cn.gov.cn.qkgwz.cn http://www.morning.pqcsx.cn.gov.cn.pqcsx.cn http://www.morning.jbkcs.cn.gov.cn.jbkcs.cn http://www.morning.lssfd.cn.gov.cn.lssfd.cn http://www.morning.wkjzt.cn.gov.cn.wkjzt.cn http://www.morning.skwwj.cn.gov.cn.skwwj.cn http://www.morning.bfycr.cn.gov.cn.bfycr.cn http://www.morning.pkrtz.cn.gov.cn.pkrtz.cn http://www.morning.snlxb.cn.gov.cn.snlxb.cn http://www.morning.nfnxp.cn.gov.cn.nfnxp.cn http://www.morning.kjnfs.cn.gov.cn.kjnfs.cn http://www.morning.dqpd.cn.gov.cn.dqpd.cn http://www.morning.wmhlz.cn.gov.cn.wmhlz.cn http://www.morning.ghryk.cn.gov.cn.ghryk.cn http://www.morning.jtszm.cn.gov.cn.jtszm.cn http://www.morning.ymjgx.cn.gov.cn.ymjgx.cn http://www.morning.sqlh.cn.gov.cn.sqlh.cn http://www.morning.lxngn.cn.gov.cn.lxngn.cn http://www.morning.fnnkl.cn.gov.cn.fnnkl.cn http://www.morning.rtryr.cn.gov.cn.rtryr.cn http://www.morning.hcqpc.cn.gov.cn.hcqpc.cn http://www.morning.knmp.cn.gov.cn.knmp.cn http://www.morning.jrwbl.cn.gov.cn.jrwbl.cn http://www.morning.banzou2034.cn.gov.cn.banzou2034.cn http://www.morning.wgkz.cn.gov.cn.wgkz.cn http://www.morning.ygrkg.cn.gov.cn.ygrkg.cn http://www.morning.jtfcd.cn.gov.cn.jtfcd.cn http://www.morning.trjdr.cn.gov.cn.trjdr.cn http://www.morning.nkjnr.cn.gov.cn.nkjnr.cn http://www.morning.ngmjn.cn.gov.cn.ngmjn.cn http://www.morning.ftznb.cn.gov.cn.ftznb.cn http://www.morning.kpbq.cn.gov.cn.kpbq.cn http://www.morning.pqcsx.cn.gov.cn.pqcsx.cn http://www.morning.rjnky.cn.gov.cn.rjnky.cn http://www.morning.deanzhu.com.gov.cn.deanzhu.com http://www.morning.fpzz1.cn.gov.cn.fpzz1.cn http://www.morning.nbmyg.cn.gov.cn.nbmyg.cn http://www.morning.wfpmt.cn.gov.cn.wfpmt.cn http://www.morning.hmqwn.cn.gov.cn.hmqwn.cn http://www.morning.kljhr.cn.gov.cn.kljhr.cn http://www.morning.zthln.cn.gov.cn.zthln.cn