分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

js的浅拷贝和深拷贝

发布时间:2023-09-06 01:23责任编辑:白小东关键词:js

前言:对象的直接量赋值其实是一种引用,对赋值后的对象修改操作会影响到原始对象值,这里的其中包括object和Array。

一、浅拷贝

浅拷贝只是复制对象的一个指针,修改复制对象属性相当于修改原始对象的属性

代码如下:

function shallowCopy(obj2) {var obj1 = {}; ???for (var prop in obj2) { ?????// 判断是否是自有属性 ???if (obj2.hasOwnProperty(prop)) { ?????obj1[prop] = obj2[prop]; ???} ???} ???return obj1;}var myobj = {name:"水月",oarr:[2,3],book:{date:2017},sayName:function(){alert(this.name);}};var newObj = shallowCopy(myobj);// 修改复制的对象,原始对象也会被修改newObj.oarr[1] = 5;newObj.book.date = 2018;console.log(myobj.oarr);console.log(myobj.book.date);

  

二、深拷贝

深拷贝,它不仅将原对象的各个属性逐个复制出去,而且将原对象各个属性所包含的对象也依次采用深复制的方法递归复制到新对象上

代码如下:

function deepClone(obj) { var o; if (typeof obj == "object") { ????if (obj === null) { ?????????o = null; ????} else { ??????????// 如果对象是数组 ?????????if (obj instanceof Array) { ?????????????o = []; ????????????for (var i = 0, len = obj.length; i < len; i++) { ?????????????????// 对象的属性如果是对象继续递归 ????????????????o.push( deepClone(obj[i]) ); ????????????} ????????} else { ????????????o = {}; ????????????for (var j in obj) { ???????????????o[j] = deepClone(obj[j]); ????????????} ????????} ????} } else { ????o = obj; } ????return o;};var oldObj = { ???name:"小明", ???oarr:[1,2], ???book:{date:2027}, ???sayName:function(){ ???????alert(this.name); ???}};var deepObj = deepClone(oldObj);// 复制的对象的数组添加一个元素,不会影响到被复制对象的数组deepObj.oarr.push(3);console.log(oldObj.oarr);console.log(deepObj.oarr);

js的浅拷贝和深拷贝

原文地址:http://www.cnblogs.com/viva-yue/p/objCopy.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved