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; /*指定行级元素的垂直对齐方式。*/

View File

@ -10,8 +10,6 @@
## 前言 ## 前言
## CSS 概述 ## CSS 概述
CSSCascading Style Sheet层叠样式表CSS 的作用就是给 HTML 页面标签添加各种样式**定义网页的显示效果**简单一句话CSS 将网页**内容和显示样式进行分离**提高了显示功能 CSSCascading Style Sheet层叠样式表CSS 的作用就是给 HTML 页面标签添加各种样式**定义网页的显示效果**简单一句话CSS 将网页**内容和显示样式进行分离**提高了显示功能
@ -48,7 +46,7 @@ css的最新版本是css3**我们目前学习的是css2.1**。 因为css3和c
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8" />
<title>Document</title> <title>Document</title>
<style> <style>
p { p {
@ -65,7 +63,6 @@ css的最新版本是css3**我们目前学习的是css2.1**。 因为css3和c
font-weight: bold; font-weight: bold;
background-color: pink; background-color: pink;
} }
</style> </style>
</head> </head>
<body> <body>
@ -73,7 +70,6 @@ css的最新版本是css3**我们目前学习的是css2.1**。 因为css3和c
<p> <p>
我是内容 我是内容
</p> </p>
</body> </body>
</html> </html>
``` ```
@ -105,10 +101,7 @@ css对换行不敏感对空格也不敏感。但是一定要有标准的语
**语法格式**其实就是键值对 **语法格式**其实就是键值对
```html ```html
选择器{ 选择器{ 属性名: 属性值; 属性名: 属性值; }
属性名: 属性值;
属性名: 属性值;
}
``` ```
或者可以写成 或者可以写成
@ -138,7 +131,9 @@ css对换行不敏感对空格也不敏感。但是一定要有标准的语
**举例** **举例**
```css ```css
p{color: red;} p {
color: red;
}
``` ```
**完整版代码举例** **完整版代码举例**
@ -150,7 +145,6 @@ p{color: red;}
font-style: italic; font-style: italic;
color: red; color: red;
} }
</style> </style>
<body> <body>
@ -159,6 +153,7 @@ p{color: red;}
<p>我不会就这样轻易的狗带</p> <p>我不会就这样轻易的狗带</p>
</body> </body>
``` ```
效果 效果
![](http://img.smyhvae.com/2015-10-03-css-01.png) ![](http://img.smyhvae.com/2015-10-03-css-01.png)
@ -169,7 +164,6 @@ p{color: red;}
```html ```html
<style type="text/css"> <style type="text/css">
/* /*
具体的注释 具体的注释
*/ */
@ -179,7 +173,6 @@ p{color: red;}
font-style: italic; font-style: italic;
color: red; color: red;
} }
</style> </style>
``` ```
@ -234,6 +227,7 @@ font是“字体” weight是“重量”的意思bold粗。
```html ```html
font-weight: normal; font-weight: normal;
``` ```
normal 就是正常的意思 normal 就是正常的意思
**斜体**fsi **斜体**fsi
@ -272,9 +266,7 @@ CSS和HTML的结合方式有3种
- **行内样式**在某个特定的标签里采用 style**属性**范围只针对此标签 - **行内样式**在某个特定的标签里采用 style**属性**范围只针对此标签
- **内嵌样式表**在页面的 head 里采用`<style>`**标签**范围针对此页面 - **内嵌样式表**在页面的 head 里采用`<style>`**标签**范围针对此页面
- **引入外部样式表css文件**的方式这种引入方式又分为两种 - **引入外部样式表 css 文件**的方式这种引入方式又分为两种 - 1采用`<link>`标签例如`<link rel = "stylesheet" type = "text/css" href = "a.css"></link>` - 2采用 import必须写在`<style>`标签中并且必须是第一句例如`@import url(a.css) ;`
- 1采用`<link>`标签例如`<link rel = "stylesheet" type = "text/css" href = "a.css"></link>`
- 2采用import必须写在`<style>`标签中并且必须是第一句例如`@import url(a.css) ;`
> 两种引入样式方式的区别外部样式表中不能写<link>标签但是可以写 import 语句 > 两种引入样式方式的区别外部样式表中不能写<link>标签但是可以写 import 语句
@ -291,6 +283,7 @@ CSS和HTML的结合方式有3种
```html ```html
<p style="color:white;background-color:red">我不会就这样轻易的狗带</p> <p style="color:white;background-color:red">我不会就这样轻易的狗带</p>
``` ```
效果 效果
![](http://img.smyhvae.com/2015-10-03-css-02.png) ![](http://img.smyhvae.com/2015-10-03-css-02.png)
@ -310,7 +303,6 @@ CSS和HTML的结合方式有3种
font-style: italic; font-style: italic;
color: red; color: red;
} }
</style> </style>
<body> <body>
@ -324,6 +316,7 @@ CSS和HTML的结合方式有3种
### 3CSS HTML 结合方式三引入外部样式表 css 文件 ### 3CSS HTML 结合方式三引入外部样式表 css 文件
**引入样式表文件**的方式又分为两种 **引入样式表文件**的方式又分为两种
- 1**采用`<link>`标签**例如`<link rel = "stylesheet" type = "text/css" href = "a.css"></link>` - 1**采用`<link>`标签**例如`<link rel = "stylesheet" type = "text/css" href = "a.css"></link>`
- 2**采用 import**必须写在`<style>`标签中并且必须是第一句例如`@import url(a.css) ;` - 2**采用 import**必须写在`<style>`标签中并且必须是第一句例如`@import url(a.css) ;`
@ -357,7 +350,6 @@ p{
现在我们来定义 3 个样式表 现在我们来定义 3 个样式表
a.css定义一个实线的黑色边框 a.css定义一个实线的黑色边框
```css ```css
@ -385,9 +377,10 @@ div{
width: 200px; width: 200px;
height: 200px; height: 200px;
border: 3px solid red; border: 3px solid red;
background-image: url("1.jpg"); background-image: url('1.jpg');
} }
``` ```
然后我们在 html 文件中引用三个样式表 然后我们在 html 文件中引用三个样式表
```html ```html
@ -395,6 +388,7 @@ div{
<link rel = "alternate stylesheet" type = "text/css" href = "b.css" title="第二种样式"></link> <link rel = "alternate stylesheet" type = "text/css" href = "b.css" title="第二种样式"></link>
<link rel = "alternate stylesheet" type = "text/css" href = "c.css" title="第三种样式"></link> <link rel = "alternate stylesheet" type = "text/css" href = "c.css" title="第三种样式"></link>
``` ```
上面引入的三个样式表中后面两个样式表作为备选注意备选的样式表中title 属性不要忘记写不然显示不出来效果的现在来看一下效果 IE 中打开网页 上面引入的三个样式表中后面两个样式表作为备选注意备选的样式表中title 属性不要忘记写不然显示不出来效果的现在来看一下效果 IE 中打开网页
![](http://img.smyhvae.com/2015-10-03-css-05.gif) ![](http://img.smyhvae.com/2015-10-03-css-05.gif)
@ -421,9 +415,7 @@ CSS的选择器分为两大类基本选择题和扩展选择器。
举例 举例
```html ```html
p{ p{ font-size:14px; }
font-size:14px;
}
``` ```
上方选择器的意思是说所有的`<p>`标签里的内容都将显示 14 号字体 上方选择器的意思是说所有的`<p>`标签里的内容都将显示 14 号字体
@ -440,7 +432,7 @@ p{
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8" />
<title>Document</title> <title>Document</title>
<style type="text/css"> <style type="text/css">
span { span {
@ -469,10 +461,9 @@ p{
举例 举例
```html ```html
#mytitle{ #mytitle{ border:3px dashed green; }
border:3px dashed green;
}
``` ```
效果 效果
![](http://img.smyhvae.com/2015-10-03-css-08.png) ![](http://img.smyhvae.com/2015-10-03-css-08.png)
@ -506,21 +497,16 @@ id选择器的选择符是“#”。
针对**你想要的所有**标签使用优点灵活 针对**你想要的所有**标签使用优点灵活
css 中用`.`来表示类举例如下 css 中用`.`来表示类举例如下
```html ```html
.one{ .one{ width:800px; }
width:800px;
}
``` ```
效果 效果
![](http://img.smyhvae.com/2015-10-03-css-07.png) ![](http://img.smyhvae.com/2015-10-03-css-07.png)
id 非常相似任何的标签都可以携带 id 属性和 class 属性class 属性的特点 id 非常相似任何的标签都可以携带 id 属性和 class 属性class 属性的特点
- 特性 1类选择器可以被多种标签使用 - 特性 1类选择器可以被多种标签使用
@ -608,7 +594,6 @@ css中用`.`来表示类。举例如下:
margin-left: 0px; margin-left: 0px;
margin-top: 0px; margin-top: 0px;
} }
``` ```
效果 效果
@ -683,7 +668,7 @@ css中用`.`来表示类。举例如下:
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8" />
<title>Document</title> <title>Document</title>
<style type="text/css"> <style type="text/css">
div div p { div div p {
@ -725,7 +710,6 @@ css中用`.`来表示类。举例如下:
![](http://img.smyhvae.com/20170711_1851.png) ![](http://img.smyhvae.com/20170711_1851.png)
```css ```css
h3.special { h3.special {
color: red; color: red;
@ -740,13 +724,12 @@ h3.special{
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8" />
<title>交集选择器测试</title> <title>交集选择器测试</title>
<style type="text/css"> <style type="text/css">
h3.special { h3.special {
color: red; color: red;
} }
</style> </style>
</head> </head>
<body> <body>
@ -780,7 +763,10 @@ h3.special.zhongyao{
举例 举例
```css ```css
p,h1,#mytitle,.one{ p,
h1,
#mytitle,
.one {
color: red; color: red;
} }
``` ```
@ -906,13 +892,7 @@ div的儿子p。和div的后代p的截然不同。
用类选择器来选择第一个或者最后一个 用类选择器来选择第一个或者最后一个
```html ```html
ul li.first{ ul li.first{ color:red; } ul li.last{ color:blue; }
color:red;
}
ul li.last{
color:blue;
}
``` ```
### 3.下一个兄弟选择器 ### 3.下一个兄弟选择器

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'];
@ -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)