运算符
运算符和表达式
① 运算符
sh
1. 运算符就是参与运算的符号,像+、-、*、/ 等。
2. 与运算符一起运算的数据称之为操作数。② 表达式
sh
1. 数据、运算符可以共同组成一个表达式
2. 表达式具有计算结果,称为表达式的值
3. 一个变量、一个直接量也可以算作表达式,称为原始表达式
4. 多个简单的表达式可以组成复杂的表达式
5. 有些表达式具有副作用,除了能得到表达式的计算结果,会被参与运算符的操作数进行修改,表达式有没有副作用由运算符决定。运算符的分类
① 按照运算符需要的操作数的个数
sh
一元运算符
二元运算符
三元运算符② 按照运算符的功能
sh
1. 算术运算符
2. 关系运算符、比较运算符
3. 逻辑运算符
4. 位运算符
5. 赋值运算符
6. 其他运算符运算符讲解(按照功能)
① 算术运算符
| 运算符 | 含义 | 操作数个数 | 操作数的类型要求 | 组成的表达式的值的类型 | 有无副作用 |
|---|---|---|---|---|---|
| + | 相加 | 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 | 有 |
+ 什么时候是正号?什么时候是相加?
sh
1. 如果操作数个数是1个,+ 是正号
2. 如果操作数个数是2个,+ 是加号关于表达式的副作用:
sh
表达式除了得到计算结果,还会对操作数进行修改
如果发生数据类型自动转换,操作数只能将转完了类型的数据参与运算,而操作数本身没有变化
有副作用的表达式,要求操作数必须是变量的形式!累加累加减: 运算符在前和在后的区别:
sh
操作数在前, 操作数数没有累加累减前的值作为表达式的值
运算符在前, 操作数累加累减之后的值作为表达式的的值② 关系运算符(比较运算符)
| 运算符 | 含义 | 操作数个数 | 操作数的类型要求 | 组成的表达式的值的类型 | 有无副作用 |
|---|---|---|---|---|---|
| > | 大于 | 2 | number、string | boolean | 无 |
| >= | 大于等于 | 2 | number、string | boolean | 无 |
| < | 小于 | 2 | number、string | boolean | 无 |
| <= | 小于等于 | 2 | number、string | boolean | 无 |
| == | 相等 | 2 | 俩操作数类型不一致转number 类型一致直接看是否相同 | boolean | 无 |
| != | 不相等 | 2 | 俩操作数类型不一致转number 类型一致直接看是否相同 | boolean | 无 |
| === | 全等 | 2 | 没有要求 | boolean | 无 |
| !== | 不全等 | 2 | 没有要求 | boolean | 无 |
副作用:要求操作数必须是变量的形式
字符串比较大小的规则:
css
1. 如果两个操作数都是 string,才会按照字符串的规则比较大小
2. 字符串按照顺序,一个字符一个字符的比较,对应的字符大,整个字符串都大,后面的字符不再比较
3. 字符使用它的unicode编码比较大小, 如 a是97、A是65null 与其他数据判断相等和不相等(特殊):
js
null == ''; // false
null == 0; // false
null == false; // false
null == undefined; // true全等判断和相等判断的区别:
css
相等判断: 如果两个操作数类型不一致,转为number 再比较
全等判断: 如果两个操作数类型不一致,直接判定为不全等,不会发生数据类型自动转换③ 逻辑运算符
| 运算符 | 含义 | 操作数个数 | 操作数的类型要求 | 组成的表达式的值的类型 | 有无副作用 |
|---|---|---|---|---|---|
| && | 逻辑与 | 2 | boolean | 取两个操作数中的一个 | 无 |
| || | 逻辑或 | 2 | boolean | 取两个操作数中的一个 | 无 |
| ! | 逻辑非 | 1 | boolean | boolean | 无 |
逻辑与运算符组成的表达式的值:
sh
如果第一个操作数成立,取第二个操作作为表达式的值
如果第一个操作数不成立,取第一个操作作为表达式的值,第二个操作不会被执行到逻辑或运算符组成的表达式的值:
sh
如果第一个操作数成立,取第一个操作数作为表达式的值,第二个操作数不会被执行到
如果第一个操作数不成立,取第二个操作数作为表达式的值使用案例
ts
if (!record.children?.length) {// record没有children属性或者record.children 数组的长度是 0,匹配判断,逻辑判断
console.log(1111)
}④ 赋值运算符
| 运算符 | 含义 | 操作数个数 | 操作数的类型要求 | 组成的表达式的值的类型 | 有无副作用 |
|---|---|---|---|---|---|
| = | 赋值 | 2 | 无要求 | 取左边操作数重置赋值之后的值 | 有 |
| += | 相加赋值 | 2 | number | 取左边操作数重置赋值之后的值 | 有 |
| -= | 相减赋值 | 2 | number | 取左边操作数重置赋值之后的值 | 有 |
| *= | 相乘赋值 | 2 | number | 取左边操作数重置赋值之后的值 | 有 |
| /= | 相除赋值 | 2 | number | 取左边操作数重置赋值之后的值 | 有 |
| %= | 取余赋值 | 2 | number | 取左边操作数重置赋值之后的值 | 有 |
| += | 字符连接赋值 | 2 | string | 取左边操作数重置赋值之后的值 | 有 |
css
赋值运算符左边的操作数必须是变量的形式, 右边的操作数可以是直接量、变量、表达式。⑤ 其他运算符
| 运算符 | 含义 | 操作数个数 | 操作数的类型要求 | 组成的表达式的值的类型 | 有无副作用 |
|---|---|---|---|---|---|
| typeof | 类型判断 | 1 | 无要求 | string | 无 |
| , | 逗号 | 2 | 无要求 | 取第二个操作数作为表达式的值 | 无 |
| + | 字符串连接符 | 2 | string | string | 无 |
| ?: |
+ 什么时候是 相加、字符串连接符或者正号?
sh
1. 如果只有一个操作数, + 表示正号
2. 如果有两个操作数,其中只要有一个操作数是string,+ 表示字符串连接符
3. 如果有两个操作数,两个操作数都不是string,+ 表示相加条件运算符组成的表达式的取值规则:
⑥条件运算符详解
| 运算符 | 含义 | 操作数个数 | 操作数的类型要求 | 组成的表达式的值的类型 | 有无副作用 |
|---|---|---|---|---|---|
| ? : | 条件运算符 | 3 | 第一个布尔 后两个无要求 | 取第二个第三个其中的一个 | 无 |
条件运算符(三元运算符)组成的表达式的取值规则:
css
如果第一个操作数成立,取第二个操作数作为表达式的值
如果第一个操作数不成立,取第三个操作数作为表达式的值运算符的优先级
css
1. 一元运算符
2. 算术运算符 乘除取余>加减
3. 关系(比较)运算符 比大小 > 判等
4. 逻辑运算符 && > ||
5. 三元运算符
6. 赋值运算符
7. 逗号运算符通过小括号提高优先级!