4 运算符
4.1 运算符和表达式
① 运算符
1. 运算符就是用于运算的符号, 像+、-、*、/ 等。
2. 与运算符一起运算的数据(变量或者直接量或者表达式)称之为操作数。
② 表达式
1. 由运算符与数据组成的式子,称之为表达式; 表达式有一个计算结果,称为表达式的值。
2. 最简单的表达式叫“原始表达式”,一个变量、一个直接量。
3. 多个简单的表达式可以组成一个复杂的表达式。
4. 有些表达式具有副作用,副作用指的是会改变参与运算的变量; 副作用由运算符决定。
4.2 运算符的分类
① 按照运算符需要的操作数的个数
一元运算符(一目运算符)
二元运算符(二目运算符)
三元运算符(三目运算符)
② 按照运算符的功能
1. 算术运算符
2. 关系运算符
3. 逻辑运算符
4. 位运算符
5. 赋值运算符
6. 其他运算符
4.3 运算符讲解(按照功能)
① 算术运算符
运算符 | 含义 | 操作数个数 | 操作数的类型要求 | 组成的表达式的值的类型 | 有无副作用 |
---|---|---|---|---|---|
+ | 加号 | 2 | number | number | 无 |
- | 减号 | 2 | number | number | 无 |
* | 乘号 | 2 | number | number | 无 |
/ | 除号 | 2 | number | number | 无 |
% | 取余(取模) | 2 | number | number | 无 |
+ | 正号 | 1 | number | number | 无 |
- | 负号 | 1 | number | number | 无 |
++ | 累加 | 1 | number | number | 有 |
– | 累减 | 1 | number | number | 有 |
正号运算符的作用:
通常,可以利用正号运算符把其他数据类型转为 number,利用了数据类型自动转换的原理。
效果与使用 Number() 函数是一样的。
累加和累减运算符:
累加和累减运算符都有副作用,要求操作数必须以变量的形式给出。
累加和累减运算符可以在操作数的前面,也可以在操作数的后面;
运算符不论在前还是在后产生的副作用都是一样的。
运算符在前还是在后,表达式的值是不一样的。
① 运算符在前: 如 ++n, 取n累加之后的值作为表达式的值。 ② 运算符在后: 如 n++, 取n累加之前的值作为表达式的值。
② 关系运算符(比较运算符)
运算符 | 含义 | 操作数个数 | 操作数的类型要求 | 组成的表达式的值的类型 | 有无副作用 |
---|---|---|---|---|---|
> | 大于 | 2 | number、string | boolean | 无 |
>= | 大于等于 | 2 | number、string | boolean | 无 |
< | 小于 | 2 | number、string | boolean | 无 |
<= | 小于等于 | 2 | number、string | boolean | 无 |
== | 相等 | 2 | number、string | boolean | 无 |
!= | 不相等 | 2 | number、string | boolean | 无 |
=== | 全等 | 2 | 没有要求 | boolean | 无 |
!== | 不全等 | 2 | 没有要求 | boolean | 无 |
比较大小的规则如下:
- 如果两个操作数类型不一致,转为 number 之后才进行比较。
- NaN 与任何数据进行任何比较得到都是 false。
- 如果两个操作数都是字符串,会按照字符串的比较规则进行比较。
字符串比较大小的规则:
- 字符串按每位字符比较。
- 取每个字符的unicode 编码比较大小。
判断相等() 和不相等(!)的规则:
- 如果两个操作数类型不一致,转为 number 之后才进行比较。
- NaN 与任何数据都不相等,包括自己。
- 如果两个操作数都是字符串,会使用字符串的比较规则进行比较:两个字符串完全一致就相等。
null 与其他类型的数据进行判断相等操作,具有自己的特殊规则:
null == ''; // false null == false; // false null == 0; // false null == undefeind; // true
判断全等(=)和不全等(!)的规则:
- 如果两个操作数类型不一致,直接全等不成立。
- 两个操作数类型一致且值相同才能全等成立。
- 全等与相等相比,不会发生数据类型的自动转换。
③ 逻辑运算符
运算符 | 含义 | 操作数个数 | 操作数的类型要求 | 组成的表达式的值的类型 | 有无副作用 |
---|---|---|---|---|---|
&& | 逻辑与(并且) | 2 | 没有要求 | 取其中一个操作数的值作为表达式的值 | 无 |
|| | 逻辑或(或者) | 2 | 没有要求 | 取其中一个操作数的值作为表达式的值 | 无 |
! | 逻辑非 | 1 | boolean | boolean | 无 |
逻辑与组成的表达式的取值规则如下:
- 如果第一个操作数成立,取第二个操作数的值作为表达式的值。
- 如果第一个操作数不成立,取第一个操作数的值作为表达式的值。
逻辑或组成的表达式的取值规则如下:
- 如果第一个操作数成立,取第一个操作数作为表达式的值。
- 如果第一个操作数不成立,取第二个操作数作为表达式的值。