update: 剩余参数
This commit is contained in:
60
06-JavaScript进阶/02-数据的赋值.md
Normal file
60
06-JavaScript进阶/02-数据的赋值.md
Normal file
@@ -0,0 +1,60 @@
|
||||
|
||||
|
||||
## 对象赋值
|
||||
|
||||
|
||||
### 用 Object.assgin() 实现浅拷贝
|
||||
|
||||
代码举例:
|
||||
|
||||
```js
|
||||
const obj1 = {
|
||||
name: 'qianguyihao',
|
||||
age: 28,
|
||||
desc: 'hello world',
|
||||
};
|
||||
|
||||
const obj2 = {
|
||||
name: '许嵩',
|
||||
sex: '男',
|
||||
};
|
||||
|
||||
// 【关键代码】浅拷贝:把 obj1 赋值给 obj2。这行代码的返回值也是 obj2
|
||||
Object.assign(obj2, obj1);
|
||||
|
||||
console.log(JSON.stringify(obj2));
|
||||
```
|
||||
|
||||
打印结果:
|
||||
|
||||
```
|
||||
{"name":"qianguyihao","sex":"男","age":28,"desc":"hello world"}
|
||||
```
|
||||
|
||||
注意,**上面这行代码在实际开发中,会经常遇到,一定要掌握**。它的作用是:将 obj1 的值追加到 obj2 中。如果两个对象里的属性名相同,则 obj12 中的值会被 obj2 中的值覆盖。
|
||||
|
||||
|
||||
## 数组赋值
|
||||
|
||||
### 扩展运算符
|
||||
|
||||
```js
|
||||
arr2 = arr1;
|
||||
```
|
||||
|
||||
上方代码中,其实是让 arr2 指向 arr1 的地址。也就是说,二者指向的是同一个内存地址。
|
||||
|
||||
如果不想让 arr1 和 arr2 指向同一个内存地址,我们可以借助扩展运算符来做:
|
||||
|
||||
```javascript
|
||||
let arr2 = [...arr1]; //arr2 会开辟新的内存地址
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
参考链接:
|
||||
|
||||
- [javaScript中浅拷贝和深拷贝的实现](https://github.com/wengjq/Blog/issues/3)
|
||||
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
|
||||
## 浅拷贝
|
||||
|
||||
对于对象或数组类型,当我们将a赋值给b,然后更改b中的属性,a也会随着变化。
|
||||
|
||||
也就是说,a和b指向了同一块堆内存,所以修改其中任意的值,另一个值都会随之变化,这就是浅拷贝。
|
||||
|
||||
## 深拷贝
|
||||
|
||||
那么相应的,如果给b放到新的内存中,将a的各个属性都复制到新内存里,就是深拷贝。
|
||||
|
||||
也就是说,当b中的属性有变化的时候,a内的属性不会发生变化。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
参考链接:
|
||||
|
||||
- [深拷贝与浅拷贝的实现(一)](http://www.alloyteam.com/2017/08/12978/)
|
||||
|
||||
- [javaScript中浅拷贝和深拷贝的实现](https://github.com/wengjq/Blog/issues/3)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user