QuarkXPress 微信公众号开发 editor wxRuby unity database templates button replace shiny 3d routing camera python查看数据类型 oracle取第一条数据 idea整理代码 js控制台打印 oracle分析函数 python中str函数 python文件写入 python返回函数 python路径设置 java的数据结构 怎么装linux系统 php整站源码 ip隐藏 莫莫小工具 linux解压tar 超星网课助手 网络文件服务器 编辑软件 mac地址修改 dnf传说装备 疯狂java list删除指定元素 medcalc mtu设置多少最好 骰子牛牛怎么玩 看图软件cad pr加速视频
当前位置: 首页 > 学习教程  > 编程学习

JS对象和数组的深浅拷贝(最全)

2021/1/9 2:04:39 文章标签: 深浅拷贝

// 对象拷贝 let objA {a:1,b:function () {console.log(this.a)},c:{c1:undefined,c2:Symbol(c2)},d:null } // console.log(objA) let objB Object.assign({},objA) //浅拷贝 console.log(objB.c objA.c) // truelet argObj {} for(let item in objA){argObj[item] Ob…


// 对象拷贝
let objA = {
	a:1,
	b:function () {
		console.log(this.a)
	},
	c:{
		c1:undefined,
		c2:Symbol('c2')
	},
	d:null
}
// console.log(objA)
let objB = Object.assign({},objA)			//浅拷贝
console.log(objB.c === objA.c) // true

let argObj = {}
for(let item in objA){
	argObj[item] = Object.getOwnPropertyDescriptor(objA, item)
}
let objC = Object.create((objA.prototype || null),argObj)		// 浅拷贝 -- value指向
console.log(objC.c === objA.c) // true


let objD = JSON.parse(JSON.stringify(objA))						// 深拷贝 -- 不能拷贝symbol,undefined,function
console.log(objD.c === objA.c) // false

// 数组拷贝
let arrA = [objA,objB,objC]
// console.log(arrA)
let arrB = arrA.slice(0)										// 浅拷贝
console.log(arrB[0] === arrA[0]) // true

let arrC = arrA.concat()										// 浅拷贝
console.log(arrC[0] === arrA[0]) // true

let arrD = [...arrA]											// 浅拷贝
console.log(arrD[0] === arrA[0]) // true

let arrE = JSON.parse(JSON.stringify(arrA))						// 深拷贝(不能拷贝symbol,undefined,function)
console.log(arrE[0] === arrA[0]) // false

// 克隆函数
function deepClone(target) {										// 对象和数组的深拷贝函数
    if (typeof target !== 'object' || target == null) return target
    var newData = target instanceof Array ? [] : {}
    for (var key in target) {
        newData[key] = typeof target[key] === 'object' ? (target[key] === null ? null : deepClone(target[key])) : target[key]
    }
    return newData
}

let arrF = deepClone(arrA)
console.log(arrF[0].c === arrA[0].c)	// false
console.log(arrF[0].b === arrA[0].b)	// true
arrF[0].a = 15
arrA[0].a = 10
arrF[0].b()	// 15
arrA[0].b()	// 10
arrA[0].b = function (){
	console.log(13)
}
arrF[0].b()	// 15
arrA[0].b()	// 13
arrF[1].b()	// 1

本文链接: http://www.dtmao.cc/news_show_1100269.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?