Skip to content

运算符

运算符和表达式

① 运算符

sh
1. 运算符就是参与运算的符号,像+、-、*、/ 等。
2. 与运算符一起运算的数据称之为操作数。

② 表达式

sh
1. 数据、运算符可以共同组成一个表达式
2. 表达式具有计算结果,称为表达式的值
3. 一个变量、一个直接量也可以算作表达式,称为原始表达式
4. 多个简单的表达式可以组成复杂的表达式
5. 有些表达式具有副作用,除了能得到表达式的计算结果,会被参与运算符的操作数进行修改,表达式有没有副作用由运算符决定。

运算符的分类

① 按照运算符需要的操作数的个数

sh
一元运算符
二元运算符
三元运算符

② 按照运算符的功能

sh
1. 算术运算符
2. 关系运算符、比较运算符
3. 逻辑运算符
4. 位运算符
5. 赋值运算符
6. 其他运算符

运算符讲解(按照功能)

① 算术运算符

运算符含义操作数个数操作数的类型要求组成的表达式的值的类型有无副作用
+相加2numbernumber
-相减2numbernumber
*相乘2numbernumber
/相除2numbernumber
%取余2numbernumber
+正号1numbernumber
-负号1numbernumber
++累加1numbernumber
--累减1numbernumber

+ 什么时候是正号?什么时候是相加?

sh
1. 如果操作数个数是1个,+ 是正号
2. 如果操作数个数是2个,+ 是加号

关于表达式的副作用:

sh
表达式除了得到计算结果,还会对操作数进行修改
如果发生数据类型自动转换,操作数只能将转完了类型的数据参与运算,而操作数本身没有变化
有副作用的表达式,要求操作数必须是变量的形式!

累加累加减: 运算符在前和在后的区别:

sh
操作数在前, 操作数数没有累加累减前的值作为表达式的值

运算符在前, 操作数累加累减之后的值作为表达式的的值

② 关系运算符(比较运算符)

运算符含义操作数个数操作数的类型要求组成的表达式的值的类型有无副作用
>大于2number、stringboolean
>=大于等于2number、stringboolean
<小于2number、stringboolean
<=小于等于2number、stringboolean
==相等2俩操作数类型不一致转number
类型一致直接看是否相同
boolean
!=不相等2俩操作数类型不一致转number
类型一致直接看是否相同
boolean
===全等2没有要求boolean
!==不全等2没有要求boolean

副作用:要求操作数必须是变量的形式

字符串比较大小的规则:

css
1. 如果两个操作数都是 string,才会按照字符串的规则比较大小
2. 字符串按照顺序,一个字符一个字符的比较,对应的字符大,整个字符串都大,后面的字符不再比较
3. 字符使用它的unicode编码比较大小, 如 a是97、A是65

null 与其他数据判断相等和不相等(特殊):

js
null == '';  	// false
null == 0;   	// false
null == false;  // false
null == undefined;  // true

全等判断和相等判断的区别:

css
相等判断: 如果两个操作数类型不一致,转为number 再比较
全等判断: 如果两个操作数类型不一致,直接判定为不全等,不会发生数据类型自动转换

③ 逻辑运算符

运算符含义操作数个数操作数的类型要求组成的表达式的值的类型有无副作用
&&逻辑与2boolean取两个操作数中的一个
||逻辑或2boolean取两个操作数中的一个
!逻辑非1booleanboolean

逻辑与运算符组成的表达式的值:

sh
如果第一个操作数成立,取第二个操作作为表达式的值
如果第一个操作数不成立,取第一个操作作为表达式的值,第二个操作不会被执行到

逻辑或运算符组成的表达式的值:

sh
如果第一个操作数成立,取第一个操作数作为表达式的值,第二个操作数不会被执行到
如果第一个操作数不成立,取第二个操作数作为表达式的值

使用案例

ts
if (!record.children?.length) {// record没有children属性或者record.children 数组的长度是 0,匹配判断,逻辑判断
    console.log(1111)
}

④ 赋值运算符

运算符含义操作数个数操作数的类型要求组成的表达式的值的类型有无副作用
=赋值2无要求取左边操作数重置赋值之后的值
+=相加赋值2number取左边操作数重置赋值之后的值
-=相减赋值2number取左边操作数重置赋值之后的值
*=相乘赋值2number取左边操作数重置赋值之后的值
/=相除赋值2number取左边操作数重置赋值之后的值
%=取余赋值2number取左边操作数重置赋值之后的值
+=字符连接赋值2string取左边操作数重置赋值之后的值
css
赋值运算符左边的操作数必须是变量的形式, 右边的操作数可以是直接量、变量、表达式。

⑤ 其他运算符

运算符含义操作数个数操作数的类型要求组成的表达式的值的类型有无副作用
typeof类型判断1无要求string
,逗号2无要求取第二个操作数作为表达式的值
+字符串连接符2stringstring
?:

+ 什么时候是 相加、字符串连接符或者正号?

sh
1. 如果只有一个操作数, + 表示正号
2. 如果有两个操作数,其中只要有一个操作数是string,+ 表示字符串连接符
3. 如果有两个操作数,两个操作数都不是string,+ 表示相加

条件运算符组成的表达式的取值规则:

⑥条件运算符详解

运算符含义操作数个数操作数的类型要求组成的表达式的值的类型有无副作用
? :条件运算符3第一个布尔
后两个无要求
取第二个第三个其中的一个

条件运算符(三元运算符)组成的表达式的取值规则:

css
如果第一个操作数成立,取第二个操作数作为表达式的值
如果第一个操作数不成立,取第三个操作数作为表达式的值

运算符的优先级

css
1. 一元运算符
2. 算术运算符  乘除取余>加减
3. 关系(比较)运算符  比大小 > 判等
4. 逻辑运算符  && > ||
5. 三元运算符 
6. 赋值运算符
7. 逗号运算符

通过小括号提高优先级!