js浅拷贝实现

本文介绍了JavaScript中的浅拷贝概念,通过Array.prototype.slice()和Object.assign()方法展示了浅拷贝如何复制对象属性的引用。同时,提供了一个简单的浅拷贝函数实现。浅拷贝仅复制对象的非对象属性的值和对象属性的引用,不适用于深拷贝复杂对象。文中还探讨了浅拷贝在数组和对象中的应用及其影响。
摘要由CSDN通过智能技术生成

jS浅拷贝实现

一个新的对象直接拷贝已存在的对象的对象属性的引用,即浅拷贝。

Array.prototype.slice()属于浅拷贝。

var arr = [2, 4, 6, { y: 10 }]
var newArr = arr.slice()
newArr[3].x = 20
newArr[3].y = 30
console.log(arr)     // [2, 5, 6, { y: 30, x: 20 }]
console.log(newArr)  // [2, 5, 6, { y: 30, x: 20 }]

浅拷贝只拷贝已存在对象的对象属性的引用,其余非对象属性是占用新的内存空间,并非与原对象共享。

var newArr = Array.prototype.slice.call(arr)
newArr[1] = 50
console.log(arr)  // [2, 4, 6, { y: 10 }]
console.log(newArr)  // [2, 50, 6, { y: 10 }]

浅拷贝:新的对象复制已有对象中非对象属性的值和对象属性的引用

简单实现一个浅拷贝函数:

var arr = [2, 4, 6, { y: 10 }]
function shallowCopy (arr) {
    var newArr = Array.isArray(arr) ? [] : {}
    // var newArr = arr instanceof Array ? [] : {}
    for (let key in arr) {
        newArr[key] = arr[key]
    }
    return newArr
}
var newArr = shallowCopy(arr)
console.log(newArr)

像常用的数组方法slice()和对象方法Object.assign()都属于浅拷贝。

var obj = { x: 1, y: 2, z: { num: 10 } }
var newObj = {}
Object.assign(newObj, obj)
newObj.y = 3
console.log(obj)  // { x: 1, y: 2, z: { num: 10 } }
console.log(newObj) // { x: 1, y: 3, z: { num: 10 } }

浅拷贝只拷贝已存在对象的对象属性的引用

var obj = { x: 1, y: 2, z: { num: 10 } }
var newObj = {}
Object.assign(newObj, obj)
newObj.z.num = 20
console.log(obj)  // { x: 1, y: 2, z: { num: 20 } }
console.log(newObj)  // { x: 1, y: 2, z: { num: 20 } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值