JS 浅拷贝的方法
时间: 2023-07-08 09:20:02 浏览: 45
JS 浅拷贝的方法有以下几种:
1. Object.assign()方法:将所有可枚举属性的值从一个或多个源对象复制到目标对象,并返回目标对象。
```
let obj1 = { name: '张三', age: 20 };
let obj2 = Object.assign({}, obj1);
console.log(obj2); // { name: '张三', age: 20 }
```
2. 扩展运算符(...):用于数组和对象的浅拷贝。
```
let obj1 = { name: '张三', age: 20 };
let obj2 = {...obj1};
console.log(obj2); // { name: '张三', age: 20 }
```
3. Array.prototype.slice():用于数组的浅拷贝。
```
let arr1 = [1, 2, 3];
let arr2 = arr1.slice();
console.log(arr2); // [1, 2, 3]
```
4. Array.prototype.concat():用于数组的浅拷贝。
```
let arr1 = [1, 2, 3];
let arr2 = arr1.concat();
console.log(arr2); // [1, 2, 3]
```
相关问题
js 浅拷贝十种方法
十种 JavaScript 浅拷贝的方法如下:
1. 使用 Object.assign() 方法:
```javascript
const copy = Object.assign({}, original);
```
2. 使用扩展运算符 (Spread Operator):
```javascript
const copy = { ...original };
```
3. 使用 Array.prototype.slice() 方法(仅适用于数组):
```javascript
const copy = original.slice();
```
4. 使用 Array.prototype.concat() 方法(仅适用于数组):
```javascript
const copy = [].concat(original);
```
5. 使用数组展开语法(仅适用于数组):
```javascript
const copy = [...original];
```
6. 使用 Array.from() 方法(仅适用于数组):
```javascript
const copy = Array.from(original);
```
7. 使用 Array.prototype.map() 方法(仅适用于数组):
```javascript
const copy = original.map(item => item);
```
8. 使用 Object.entries() 和 Object.fromEntries() 方法(仅适用于对象):
```javascript
const copy = Object.fromEntries(Object.entries(original));
```
9. 使用 JSON.parse() 和 JSON.stringify() 方法(适用于 JSON-serializable 对象):
```javascript
const copy = JSON.parse(JSON.stringify(original));
```
10. 使用 for...in 循环(仅适用于对象):
```javascript
const copy = {};
for (let key in original) {
copy[key] = original[key];
}
```
js深拷贝和浅拷贝方法
在JavaScript中,深拷贝和浅拷贝是两种常用的对象拷贝方法。
浅拷贝是按位拷贝对象,创建一个新对象,并将原始对象的属性值精确拷贝到新对象中。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址。因此,如果其中一个对象改变了这个地址,就会影响到另一个对象。\[3\]
深拷贝是将原始对象及其所有嵌套对象的属性值都进行拷贝,创建一个全新的对象。深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。当对象和它所引用的对象一起拷贝时即发生深拷贝。深拷贝相比于浅拷贝速度较慢并且花销较大。\[2\]
在JavaScript中,实现深拷贝的方法有以下几种:
1. 通过递归的方式实现深拷贝,可以使用jQuery中的extend方法来实现。这种方法会递归地遍历对象的所有属性,并进行拷贝。\[1\]
2. 使用JSON.parse()和JSON.stringify()方法来实现深拷贝。首先将对象转换为JSON字符串,然后再将JSON字符串转换为新的对象。这种方法可以实现简单的深拷贝,但是对于包含函数、正则表达式等特殊类型的对象可能会出现问题。\[1\]
3. 使用第一种方法中的递归方式来实现深拷贝。这种方法需要自己编写递归函数来遍历对象的所有属性,并进行拷贝。\[1\]
总结起来,深拷贝是将原始对象及其所有嵌套对象的属性值都进行拷贝,创建一个全新的对象,而浅拷贝只是按位拷贝对象,创建一个新对象,并将原始对象的属性值精确拷贝到新对象中。在JavaScript中,可以通过递归方式、JSON.parse()和JSON.stringify()方法等来实现深拷贝。
#### 引用[.reference_title]
- *1* [JavaScript深浅拷贝(三种方法)](https://blog.csdn.net/weixin_46022934/article/details/121415082)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [js实现浅拷贝和深拷贝](https://blog.csdn.net/ab_er/article/details/126009166)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]