Object.assign的使用方法,举例说明,含义
时间: 2024-12-08 10:06:32 浏览: 9
`Object.assign()` 是 JavaScript 中的一个内置函数,用于将所有指定的对象合并到目标对象中。它不会改变原对象,而是创建一个新的对象,新对象包含源对象的所有属性以及目标对象的属性。
基本语法如下:
```javascript
Object.assign(target, ...sources)
```
- `target`: 目标对象,接收合并后的结果。
- `sources`: 可选,零个或多个源对象,其属性会被复制到目标对象上。
例如:
```javascript
let obj1 = { a: 1, b: 2 };
let obj2 = { c: 3, d: 4 };
let newObj = Object.assign(obj1, obj2); // 或者直接写成 Object.assign(obj1, { c: 3, d: 4 });
console.log(newObj); // 输出:{ a: 1, b: 2, c: 3, d: 4 }
```
在这个例子中,`obj1` 和 `obj2` 的属性都被合并到了 `newObj` 中,`obj2` 的属性覆盖了同名的 `obj1` 属性。
相关问题
代码举例说明,浅拷贝和深拷贝
浅拷贝和深拷贝都是对象复制的方式。浅拷贝只是复制了对象的引用,而深拷贝则是复制了整个对象,包括对象的所有属性和子对象。下面是一个示例代码:
// 浅拷贝
let obj1 = {a: 1, b: {c: 2}};
let obj2 = Object.assign({}, obj1);
obj2.b.c = 3;
console.log(obj1); // {a: 1, b: {c: 3}}
console.log(obj2); // {a: 1, b: {c: 3}}
// 深拷贝
let obj3 = {a: 1, b: {c: 2}};
let obj4 = JSON.parse(JSON.stringify(obj3));
obj4.b.c = 3;
console.log(obj3); // {a: 1, b: {c: 2}}
console.log(obj4); // {a: 1, b: {c: 3}}
举例说明深拷贝和浅拷贝的区别
假设有以下对象:
```
var obj = {
name: 'Alice',
age: 20,
hobbies: ['reading', 'traveling']
};
```
浅拷贝:
```
var newObj = Object.assign({}, obj);
```
此时,`newObj` 是 `obj` 的浅拷贝,它们的内存地址是不同的,但是它们的属性值(如 `name` 和 `age`)都相同。但是,如果修改 `newObj` 的某个属性值,`obj` 中对应的属性值也会被修改:
```
newObj.hobbies.push('swimming');
console.log(obj.hobbies); // ['reading', 'traveling', 'swimming']
```
这是因为 `newObj.hobbies` 指向的是同一个数组对象,所以修改 `newObj.hobbies` 会影响到 `obj.hobbies`。
深拷贝:
```
var newObj = JSON.parse(JSON.stringify(obj));
```
此时,`newObj` 是 `obj` 的深拷贝,它们的内存地址和属性值都完全独立。修改 `newObj` 的属性值不会影响 `obj`:
```
newObj.hobbies.push('swimming');
console.log(obj.hobbies); // ['reading', 'traveling']
```
这是因为 `newObj.hobbies` 和 `obj.hobbies` 是两个完全独立的数组对象。
阅读全文