update: 扩展运算符

This commit is contained in:
qianguyihao 2020-08-24 23:22:58 +08:00
parent 92a32ad5f8
commit 516051b422
7 changed files with 429 additions and 398 deletions

View File

@ -966,6 +966,14 @@ CSS Peek 对 Vue 没有支持,该插件提供了对 Vue 文件的支持。
一个超级详细和真诚的前端入门项目 一个超级详细和真诚的前端入门项目
## todo
- [issues 84](https://github.com/qianguyihao/Web/issues/84)
## 参考链接 ## 参考链接
- [VSCode 插件大全 VSCode 高级玩家之第二篇](https://juejin.im/post/5ea40c6751882573b219777d) - [VSCode 插件大全 VSCode 高级玩家之第二篇](https://juejin.im/post/5ea40c6751882573b219777d)

View File

@ -81,9 +81,9 @@ CSS中所有的行都有行高。盒子模型的padding绝对不是直
### `vertical-align: middle;` 属性 ### `vertical-align: middle;` 属性
`vertical-align`属性可用于指定**行内元素**inline**行内块元素**inline-block**表格的单元格**table-cell的垂直对齐方式 `vertical-align`属性可用于指定**行内元素**inline**行内块元素**inline-block**表格的单元格**table-cell的垂直对齐方式主要是用于图片表格文本的对齐
主要是用于图片表格文本的对齐代码举例 代码举例
```css ```css
vertical-align: middle; /*指定行级元素的垂直对齐方式。*/ vertical-align: middle; /*指定行级元素的垂直对齐方式。*/

File diff suppressed because it is too large Load Diff

View File

@ -300,7 +300,7 @@ switch (true) {
switch 语句中的`break`可以省略但一般不建议对于新手而言否则结果可能不是你想要的会出现一个现象**case 穿透** switch 语句中的`break`可以省略但一般不建议对于新手而言否则结果可能不是你想要的会出现一个现象**case 穿透**
当然如果你能利用好 case 穿透会让代码得十分优雅 当然如果你能利用好 case 穿透会让代码得十分优雅
**举例 1**case 穿透的情况 **举例 1**case 穿透的情况
@ -469,7 +469,7 @@ function handleRetCode(retCode) {
} }
``` ```
上面的写法 2是比较推荐的写法直接通过 return 的方式 function 里的代码不再继续往下走这就达到目的了对了因为要用到 return 所以需要单独封装到一个 function 里面 上面的写法 2是比较推荐的写法直接通过 return 的方式 function 里的代码不再继续往下走这就达到目的了对了因为要用到 return 所以整段代码是封装到一个 function 里的
如果你以后看到有前端小白采用的是**写法 1**请一定要把**写法 2**传授给他不需要那么多的 if else直接用 return 返回就行了 如果你以后看到有前端小白采用的是**写法 1**请一定要把**写法 2**传授给他不需要那么多的 if else直接用 return 返回就行了

View File

@ -15,9 +15,9 @@
| 方法 | 描述 | 备注 | | 方法 | 描述 | 备注 |
| :-------- | :------------------------------------------------------------------------- | :------------- | | :-------- | :------------------------------------------------------------------------- | :------------- |
| push() | 向数组的**最后面**插入一个或多个元素返回结果为**新数组的长度** | 会改变原数组 | | push() | 向数组的**最后面**插入一个或多个元素返回结果为新数组的**长度** | 会改变原数组 |
| pop() | 删除数组中的**最后一个**元素返回结果为**被删除的元素** | 会改变原数组 | | pop() | 删除数组中的**最后一个**元素返回结果为**被删除的元素** | 会改变原数组 |
| unshift() | 在数组**最前面**插入一个或多个元素返回结果为**新数组的长度** | 会改变原数组 | | unshift() | 在数组**最前面**插入一个或多个元素返回结果为新数组的**长度** | 会改变原数组 |
| shift() | 删除数组中的**第一个**元素返回结果为**被删除的元素** | 会改变原数组 | | shift() | 删除数组中的**第一个**元素返回结果为**被删除的元素** | 会改变原数组 |
| | | | | | | |
| slice() | 从数组中**提取**指定的一个或多个元素返回结果为**新的数组** | 不会改变原数组 | | slice() | 从数组中**提取**指定的一个或多个元素返回结果为**新的数组** | 不会改变原数组 |
@ -183,7 +183,7 @@ console.log(arr); // 打印结果是数组:[1, "abc", true]
### push() ### push()
`push()`向数组的**最后面**插入一个或多个元素返回结果为**新数组的长度** `push()`向数组的**最后面**插入一个或多个元素返回结果为新数组的**长度**会改变原数组因为原数组变成了新数组
语法 语法
@ -227,7 +227,7 @@ console.log(JSON.stringify(arr)); // 打印结果:["王一","王二"]
### unshift() ### unshift()
`unshift()`在数组**最前面**插入一个或多个元素返回结果为**新数组的长度**插入元素后其他元素的索引会依次调整 `unshift()`在数组**最前面**插入一个或多个元素返回结果为新数组的**长度**会改变原数组因为原数组变成了新数组插入元素后其他元素的索引会依次调整
语法 语法

View File

@ -42,7 +42,7 @@ fn(1, 2, 3); //方法的定义中了四个参数,但调用函数时只使用
打印结果 打印结果
``` ```bash
1 1
2 2
undefined undefined
@ -80,6 +80,7 @@ const sum = (...args) => {
}; };
console.log(sum(10, 20, 30)); console.log(sum(10, 20, 30));
``` ```
打印结果60 打印结果60
### 剩余参数和解构赋值配合使用 ### 剩余参数和解构赋值配合使用
@ -104,7 +105,7 @@ console.log(s2); // ['李四', '王五']
```js ```js
const arr = [10, 20, 30]; const arr = [10, 20, 30];
...arr // 10, 20, 30 注意,这一行是伪代码 ...arr // 10, 20, 30 注意,这一行是伪代码,这里用到了扩展运算符
console.log(...arr); // 10 20 30 console.log(...arr); // 10 20 30
console.log(10, 20, 30); // 10 20 30 console.log(10, 20, 30); // 10 20 30
@ -116,10 +117,17 @@ console.log(10, 20, 30); // 10 20 30
我们把`...arr` 打印出来发现打印结果竟然是 `10 20 30`为啥逗号不见了呢因为逗号被当作了 console.log 的参数分隔符如果你不信可以直接打印 `console.log(10, 20, 30)` 看看 我们把`...arr` 打印出来发现打印结果竟然是 `10 20 30`为啥逗号不见了呢因为逗号被当作了 console.log 的参数分隔符如果你不信可以直接打印 `console.log(10, 20, 30)` 看看
接下来我们看一下扩展运算符的应用
**举例**数组赋值的问题 ### 举例1数组赋值
我们来分析一段代码将数组 arr1 赋值给 arr2 数组赋值的代码举例
```js
let arr2 = [...arr1]; // 将 arr1 赋值给 arr2
```
为了理解上面这行代码我们先来分析一段代码将数组 arr1 赋值给 arr2
```javascript ```javascript
let arr1 = ['www', 'smyhvae', 'com']; let arr1 = ['www', 'smyhvae', 'com'];
@ -128,7 +136,7 @@ console.log('arr1:' + arr1);
console.log('arr2:' + arr2); console.log('arr2:' + arr2);
console.log('---------------------'); console.log('---------------------');
arr2.push('你懂得'); //往arr2 里添加一部分内容 arr2.push('你懂得'); //往 arr2 里添加一部分内容
console.log('arr1:' + arr1); console.log('arr1:' + arr1);
console.log('arr2:' + arr2); console.log('arr2:' + arr2);
``` ```
@ -139,11 +147,11 @@ console.log('arr2:' + arr2);
上方代码中我们往往 arr2 里添加了`你懂的`却发现arr1 里也有这个内容原因是`let arr2 = arr1;`其实是让 arr2 指向 arr1 的地址也就是说二者指向的是同一个内存地址 上方代码中我们往往 arr2 里添加了`你懂的`却发现arr1 里也有这个内容原因是`let arr2 = arr1;`其实是让 arr2 指向 arr1 的地址也就是说二者指向的是同一个内存地址
如果不想让 arr1 arr2 指向同一个内存地址我们可以借助扩展运算符来做 如果不想让 arr1 arr2 指向同一个内存地址我们可以借助**扩展运算符**来做
```javascript ```javascript
let arr1 = ['www', 'smyhvae', 'com']; let arr1 = ['www', 'smyhvae', 'com'];
let arr2 = [...arr1]; //arr2 会重新开辟内存地址 let arr2 = [...arr1]; //【重要代码】arr2 会重新开辟内存地址
console.log('arr1:' + arr1); console.log('arr1:' + arr1);
console.log('arr2:' + arr2); console.log('arr2:' + arr2);
console.log('---------------------'); console.log('---------------------');
@ -155,6 +163,40 @@ console.log('arr2:' + arr2);
运行结果 运行结果
![](http://img.smyhvae.com/20180304_1951.png) ```bash
arr1:www,smyhvae,com
arr2:www,smyhvae,com
---------------------
arr1:www,smyhvae,com
arr2:www,smyhvae,com,你懂得
```
我们明白了这个例子就可以避免开发中的很多业务逻辑上的 bug 我们明白了这个例子就可以避免开发中的很多业务逻辑上的 bug
### 举例2合并数组
代码举例
```js
let arr1 = ['王一', '王二', '王三'];
let arr2 = ['王四', '王五', '王六'];
// ...arr1 // '王一','王二','王三'
// ...arr2 // '王四','王五','王六'
// 方法1
let arr3 = [...arr1, ...arr2];
console.log(arr3); // ["王一", "王二", "王三", "王四", "王五", "王六"]
// 方法2
arr1.push(...arr2);
console.log(arr1); // ["王一", "王二", "王三", "王四", "王五", "王六"]
```
### 举例3将伪数组或者可遍历对象转换为真正的数组
代码举例
```js
const myDivs = document.getElementsByClassName('div');
const divArr = [...myDivs]; // 利用扩展运算符,将伪数组转为真正的数组
```

View File

@ -3,7 +3,7 @@
项目地址<https://github.com/qianguyihao/Web> 项目地址<https://github.com/qianguyihao/Web>
前端入门和进阶学习笔记从零开始学前端做一名精致的前端工程师持续更新中本项目的主要作用有 前端入门到进阶图文教程从零开始学前端做一名精致的前端工程师持续更新中本项目的主要作用有
- 1网上的大部分入门教程都不太适合初学者本项目争取照顾到每一位前端入门者的同理心即使你完全不懂前端甚至不懂编程通过这个教程也能让小白入门 - 1网上的大部分入门教程都不太适合初学者本项目争取照顾到每一位前端入门者的同理心即使你完全不懂前端甚至不懂编程通过这个教程也能让小白入门
@ -37,6 +37,7 @@
扫一扫你将发现一个全新的世界而这将是一场美丽的意外 扫一扫你将发现一个全新的世界而这将是一场美丽的意外
![](http://img.smyhvae.com/20190101.png) ![](http://img.smyhvae.com/20200101.png)