Skip to content

Commit 47c303b

Browse files
authored
Merge pull request WTFAcademy#10 from lesenelir/04_Operators
feat: add 04_Operators
2 parents 47061a4 + a6db64a commit 47c303b

2 files changed

Lines changed: 182 additions & 0 deletions

File tree

04_Operators/Operators.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
console.log(1 + (2 ** 3) / 2)
2+
3+
let x = 10
4+
console.log(x++ % 2, x)
5+
6+
console.log(null || 1 && 2 || 3)

04_Operators/readme.md

Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
# WTF JavaScript 极简教程: 4. 运算符
2+
3+
WTF JavaScript 教程,帮助新人快速入门 JavaScript。
4+
5+
**推特**[@WTFAcademy_](https://twitter.com/WTFAcademy_) | [@0xAA_Science](https://twitter.com/0xAA_Science)
6+
7+
**WTF Academy 社群:** [官网 wtf.academy](https://wtf.academy/) | [WTF Solidity 教程](https://github.com/AmazingAng/WTFSolidity) | [discord](https://discord.wtf.academy/) | [微信群申请](https://docs.google.com/forms/d/e/1FAIpQLSe4KGT8Sh6sJ7hedQRuIYirOoZK_85miz3dw7vA1-YjodgJ-A/viewform?usp=sf_link)
8+
9+
所有代码和教程开源在 github: [github.com/WTFAcademy/WTF-Javascript](https://github.com/WTFAcademy/WTF-Javascript)
10+
11+
---
12+
13+
这一讲,我们将介绍 JavaScript 中常用的运算符:算数运算符、逻辑运算符。
14+
15+
## 1. 算数运算符
16+
17+
算数运算符是和计算相关的运算符, 我们把算数运算符分为以下几类:
18+
19+
- 加法`+`
20+
- 减法`-`
21+
- 乘法`*`
22+
- 除法`/`
23+
- 取余`%`
24+
- 求幂`**`
25+
- 递增`++`
26+
- 递减`--`
27+
28+
前三个都非常简单,我们介绍后五个运算符。
29+
30+
### 1.1 除法`/`
31+
32+
如果你之前学过一些别的编程语言,例如Java、C、C++等,你会知道在很多编程语言中,除法`/`一般都是作整除运算。但是在JavaScript中,除法`/`就是指数学上的除。如果你需要整除运算,则需要调用`Math.floor()`进行向下取整。
33+
34+
```js
35+
5 / 4; // 1.25
36+
Math.floor(5 / 4); // 1
37+
8 / 9; //0.8888888888888888
38+
Math.floor(8 / 9); // 0
39+
```
40+
41+
### 1.2 取余`%`
42+
43+
`a % b`结果是`a`整除`b`的余数。
44+
45+
```js
46+
5 % 4; // 1,5除以4的余数
47+
8 % 9; // 8,8除以9的余数
48+
```
49+
50+
### 1.3 求幂`**`
51+
52+
`a ** b`结果是`a``b`次幂。
53+
54+
```js
55+
2 ** 2; // 2² = 4
56+
2 ** 3; // 2³ = 8
57+
```
58+
59+
### 1.4 递增和递减`++` `--`
60+
61+
递增和递减运算符的原理都类似,我们以递增运算符作为讲解。递增运算符有两个形式:
62+
63+
- 前缀形式(++i):运算符在变量的前面,先递增,后执行语句。
64+
- 后缀形式(i++):运算符在变量的后面,先执行语句,后递增。
65+
66+
```js
67+
let num1 = 1, num2 = 1;
68+
console.log(++num1, num1) // 2 2
69+
console.log(num2++, num2) // 1 2
70+
```
71+
72+
## 2. 逻辑运算符
73+
74+
JavaScript中有四个逻辑运算符:
75+
76+
-`||`
77+
-`&&`
78+
-`!`
79+
- 空值合并`??`
80+
81+
### 2.1 或`||`
82+
83+
或运算是指当参与运算的任何一个参数为`true`时,返回的结果就为`true`,否则就返回`false`
84+
85+
我们可以把或运算理解为“寻找第一个真值,如果没有找到返回最后一个值”的运算。
86+
87+
```js
88+
true || true; // true
89+
false || true; // true
90+
true || false; // true
91+
false || false; // false
92+
93+
// 理解为寻找第一个真值
94+
null || 1; // 1(1是第一个真值)
95+
null || true || 1; // true(true是第一个真值)
96+
null || undefined || 0; // 0(都是假值,返回最后一个值)
97+
```
98+
99+
### 2.2 与`&&`
100+
101+
与运算是指当参与运算的任何一个参数为`false`时,返回的结果就为`false`,否则就返回`true`
102+
103+
我们可以把与运算理解为“寻找第一个假值,如果没有找到返回最后一个值”的运算。
104+
105+
```js
106+
true && true; // true
107+
false && true; // false
108+
true && false; // false
109+
false && false; // false
110+
111+
// 理解为寻找第一个假值
112+
1 && 2 && null && 3; // null(找到假值,返回假值)
113+
1 && 2 && 3; // 3(没有找到假值,返回最后一个值)
114+
```
115+
116+
### 2.3 非`!`
117+
118+
非运算符是把操作数转换为布尔类型,并返回相反的值。非`!`运算符在逻辑运算符中优先级最高,比或`||`运算符和与`&&`运算符优先级高。
119+
120+
```js
121+
!true; // false
122+
!null; // true
123+
!!null; // false
124+
!undefined; // true
125+
```
126+
127+
### 2.4 空值合并`??`
128+
129+
对于`a ?? b`的结果为:
130+
131+
- 如果`a`的值不是`null``undefined`,则结果为`a`
132+
- 如果`a`的值是`null``undefined`,则结果为`b`
133+
134+
`a ?? b`的结果可以等价于三目运算符:
135+
136+
`(a !== null && a !== undefined) ? a : b`
137+
138+
我们可以通过空值合并运算符计算出找到第一个不是`null``undefined`的值。
139+
140+
```js
141+
let course;
142+
course ?? 'WTF'; // WTF(course值为undefined,返回后一个值)
143+
144+
let name = '0xAA'
145+
name ?? 'WTF'; // 0xAA(name值存在,返回第一个值)
146+
```
147+
148+
## 习题
149+
150+
请思考下面代码每一行的输出,并将结果写下来。你可以在链接【注:文档修改要跳转,此处没跳转】上找到这段代码,运行它,并验证你的结果是否正确。
151+
152+
```js
153+
console.log(1 + (2 ** 3) / 2) // 5
154+
155+
let x = 10
156+
console.log(x++ % 2, x) // 0 11
157+
158+
console.log(null || 1 && 2 || 3) // 2
159+
// null || 1 返回1 (找真,有真返回1)
160+
// 1 && 2 返回2 (找假,没有假返回最后一个)
161+
// 2 || 3 返回2 (找真,找到第一个真就返回)
162+
```
163+
164+
扩展题目:请判断下面代码输出的结果,并思考JavaScript在做浮点运算时需要注意什么,为什么solidity不支持浮点类型?
165+
166+
```js
167+
console.log(0.1 + 0.2 === 0.3) // false
168+
169+
// 修改:
170+
(0.1 * 10 + 0.2 * 10) / 10 // 0.3
171+
```
172+
173+
## 总结
174+
175+
这一讲,我们介绍了基本的运算符:算数运算符,逻辑运算符。你会在之后的 JavaScript 之旅中不断和他们打交道!
176+

0 commit comments

Comments
 (0)