运算符的分类
1. 数量的区分
一元运算符: () .
二元运算符: + - * / %(取余)
三元运算符: ?:
2. 功能区分
算术运算符:(数学) 自增++ 自减--
> 前置 ++ ++a 先将a自身加1 然后将a的返回值参与运算
> 后置 ++ a++ 先将a的值参与运算 然后对a进行加1
比较运算符:> >= < <= == ===
逻辑运算符:&& || !
位运算符:^
### 其他类型的数据使用算数运算
1. 除了加号运算符之外的算数运算符
将原始类型转换为数字类型(自动转换) 然后进行运算
1. boolean true -> 1 false -> 0
2. string 如果字符串是一个正确的数字 直接转换为数字类型 参与运算
3. null -> 0
4. undefined -> NaN
5. 引用类型 - NaN
2. 加号运算符
1. 加号又一边有字符串,含义变成了做字符串的拼接
2. 加号两边都没有字符串 但是有一个数据为对象 对象自动转换为[object Object] 然后做字符串的拼接
比较运算符
比较运算符:> >= < <= == === != !==
**比较运算符的返回值是boolean**
**算数运算符的优先级高于比较运算符**
### 大小比较
1. > >= < <=
**细节**
1. 两个比较的操作数时字符串,比较的是字符串的字符编码
2. 如果一个不为字符串,并且两个都为原始类型,将他们同时转换为数字进行比较
3. NaN与任意数据进行比较都是false,包括自身
4. 如果其中之一为对象,转换成原始类型"[object Object]" ,然后按照规则1和2进行比较
### 相等比较
2. == === !== !===
== 比较两个数据是否相等
!= 比较两个数据是否不相等
1. 两端类型不同
1. null 和 undefined 进行比较时保持相等 , 和其他原始类型比较 都不相等
2. 其他原始类型,先转换为数字再进行比较
3. infinity和-infinity 自身和自身相等
4. 对象要先转换为原始类型再进行比较
### 全等比较
===
!==
1. 同时比较数据和类型是否相等
## 逻辑运算符
逻辑运算符:&& || !
### 逻辑与(并且)
符号 &&
表达1 && 表达式2
1. 对表达式1进行Boolean判断
null -> false
undefined -> false
0 -> false
NaN -> false
"" ->false
false
其他数据全部为真
2. 如果表达式1的值为假 直接返回表达式1的值,否则,返回表达式2的值
### 逻辑或
||
表达式1 || 表达式2
1. 对表达式1进行Boolean判断
2. 如果表达式1的值为真 直接返回表达式1的值,否则,返回表达式2的值
### 逻辑非
!
一元运算符
## 三元运算符
? :
表达式1 ? 表达式2 : 表达式3
1. 对表达式1进行Boolean判断
2. 如果判定的结果为真返回表达式2的值,否则返回表达式3的值
## 位运算符(扩展)
将一个整数的二进制格式进行运算
在js中,如果对一个数进行位运算,现将这个数转换为整数,并且按照32位二进制排列
### 位与运算
&
整数1 & 整数2
将两个整数每一位进行比较 如果都为1 结果为1 否则为0
### 位或运算
|
整数1 | 整数2
将两个整数每一位进行比较 如果有一个为1 结果为1 否则为0
### 非(否)运算
~
取反
### 异或运算
^
将表达式1和表达式2 进行比较 相同取0 不同取1