js拷贝对象方法
一、介绍
在JavaScript中,对象是非常重要的数据类型之一。在开发过程中,我们经常需要对对象进行复制或拷贝操作。本文将介绍JavaScript中几种常见的拷贝对象方法。js方法
二、浅拷贝
1.定义
浅拷贝是指只复制对象的引用,而不是对象本身。因此,如果原始对象中有一个属性指向另一个对象,则复制后的新对象中的相应属性也将指向同一个对象。
2.实现方法
(1)Object.assign()方法
Object.assign()方法可以将所有可枚举属性从一个或多个源对象复制到目标对象,并返回目标对象。
示例代码:
```
let obj1 = {a: 1, b: 2};
let obj2 = {c: 3, d: 4};
let newObj = Object.assign({}, obj1, obj2);
console.log(newObj); // 输出:{a: 1, b: 2, c: 3, d: 4}
```
(2)展开运算符(...)
展开运算符可以将一个数组或者类数组解构成单个元素,并将它们插入到另一个数组或者类数组中。
示例代码:
```
let obj1 = {a: 1, b: [2,3]};
let obj2 = {...obj1};
console.log(obj2); // 输出:{a: 1, b: [2,3]}
```
三、深拷贝
1.定义
深拷贝是指复制对象本身,而不是对象的引用。因此,如果原始对象中有一个属性指向另一个对象,则复制后的新对象中的相应属性也将指向一个新的对象。
2.实现方法
(1)JSON.parse()和JSON.stringify()方法
JSON.parse()方法可以将一个JSON字符串转换为JavaScript对象,而JSON.stringify()方法可以将一个JavaScript对象转换为JSON字符串。
利用这两个方法,我们可以实现深拷贝:
示例代码:
```
let obj1 = {a: 1, b: [2,3]};
let obj2 = JSON.parse(JSON.stringify(obj1));
console.log(obj2); // 输出:{a: 1, b: [2,3]}
```
需要注意的是,该方法无法处理函数、RegExp、Date等特殊类型。
(2)递归拷贝
递归拷贝是一种比较常见的深拷贝方式。它通过遍历原始对象,并创建新的对象来实现深度复制。
示例代码:
```
function deepClone(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
let cloneObj = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
cloneObj[key] = deepClone(obj[key]);
}
}
return cloneObj;
}
let obj1 = {a: 1, b: [2,3]};
let obj2 = deepClone(obj1);
console.log(obj2); // 输出:{a: 1, b: [2,3]}
```
需要注意的是,该方法也无法处理函数、RegExp、Date等特殊类型。
四、比较
1.浅拷贝 vs. 深拷贝
浅拷贝只复制对象的引用,而不是对象本身。因此,如果原始对象中有一个属性指向另一个对象,则复制后的新对象中的相应属性也将指向同一个对象。
深拷贝复制对象本身,而不是对象的引用。因此,如果原始对象中有一个属性指向另一个对象,则复制后的新对象中的相应属性也将指向一个新的对象。
2.实现方法比较
(1)Object.assign()方法 vs. 展开运算符(...)
Object.assign()方法可以将所有可枚举属性从一个或多个源对象复制到目标对象,并返回目标对象。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论