## JS运算符
#### 算数二元运算符
- +加号
- 对符号两侧的值进行加法运算并将结果返回
- 对非数字(除了字符串)进行加法运算时,它会将其先转换为数字,然后再运算
- 任何值和NaN做任何运算都返回NaN
- 对两个字符串进行相加,则会进行拼串的操作
- -减号
- 减号可以对符号两侧的值进行减法运算
- *乘号
- 乘法可以对符号两侧的值进行乘法运算
- /除号
- 除法可以对符号两侧的值进行除法运算
- %取模
- %可以对符号两侧的值进行取模(取余数)运算
- 同样对非数字进行取余数的运算,也会转换为数字然后运算
**加法、减法、除法、乘法、取模对字符串中非数字运算结果都为NaN**
#### 算数一元运算符
- 一元加号
- 一元加号相当于数学运算中的正号
- 不会对一个数值产生任何变化
- 一元减号
- 一元减号相当于数学运算中的负号
- 负号可以对一个数值进行符号位取反
#### 自增自减
- 自增
- 指在变量原值基础上增加一个1
- 后++(a++) 的值是变量自增前的值(变量的原值)
- ++前 (++a)的值是变量自增后的值(变量的新值)
- 无论是前++还是后++都会立即使原变量自增1.调用几次就自增几次
- 自减
- 指在变量原值基础上减少一个1
- 后-- (a--)的值是变量自减前的值(变量原值)
- --前 (--a) 的值是变量自减后的值(变量新值)
- 无论是--前 还是后-- 都会使原变量立即自减1
#### 逻辑运算符
- ! 逻辑 非
- 为一个布尔值取反
- true变成false. false变成true
- 如果对一个非布尔值进行取反操作,它会将其转换为布尔值,然后再取反
- && 逻辑 与 (爱情观)
- &&可以对符号两侧的值进行 与 运算
- 两端只有都是true时,才会返回true.只要有一个false就会返回false
- JS中 与 运算是短路的与,如果第一个值是false,则不看第二个值直接执行结果
- || 逻辑 或 (亲情观)
- ||可以对符号两侧的值进行 或 运算
- 只要有一个true,就会返回true. 两端只有都是false时,才会返回false,
- JS中的 或 也是短路的或 .如果第一个值是true,则不看第二个值直接执行结果
**非布尔值的与运算**
1. 如果两个值都为true,则返回后边的
2. 如果两个值中有false,则返回靠前的false
如果第一个值为false,则返回第一个.如果第一个值是true,则无脑直接返回第二个值
**非布尔值的或运算**
1.两个值中有true,则返回靠前的true.
2.如果两个值都为false,则返回后边的
如果第一个值为true,则返回第一个.如果第一个值是false,则无脑直接返回第二个值
#### 赋值运算符
- = 赋值. 可以将右边的值赋值给左边的变量
+=
a+=x 等价于a=a+x
-=
a-=x 等价于a=a-x
*=
a*=x 等价于a=a*x
/=
a/=x 等价于a=a/x
%=
a%=x 等价于a=a%x
#### 关系运算符
- 可以比较两个值之间的大小关系
- 如果对非数值类型进行关系运算,则会将他们转换为number,然后再比较
- 当关系运算符两侧都是字符串时,它不会将字符串转换为number,而是会比较字符串的unicode编码
- 当字符串中含有多个字符时,会逐位进行比较
- NaN和任何值比较都是false
> 大于号.比较符号左侧的值是否大于右侧的值
- 如果关系成立返回true,否则返回false
>= 大于等于号.比较左侧的值是否大于或等于右侧的值
- 如果关系成立返回true,否则返回false
< 小于号 比较符号左侧的值是否小于右侧的值
- 如果关系成立返回true,否则返回false
<= 小于等于号.比较左侧的值是否小于或等于右侧的值
- 如果关系成立返回true,否则返回false
#### 相等运算符 和 全等运算符
- == 相等运算符
- 判断两个值是否相等
- 相等返回true
- 不相等返回false
**如果对两个类型不同的变量进行相等比较,先将其转换为相同的类型,然后再比较**
- === 全等运算符
- 只判断两个值的类型是否相同
- 不同直接返回false
- 全等和相等的区别就是 相等会做自动的类型转换.全等不会
- != 不等运算符
- 如果两个值不等则返回true
- 不等对值进行自动的类型转换,如果转换后不相等,则为true
- !== 全不等
- 全不等比较的两个值类型不同,直接返回true
- **isNaN()**
- 专门判断一个值是否是NaN,如果是返回true,否则返回false
#### 三元运算符 (三目运算符)
- 三元运算符需要三个操作数
- 语法:
- 条件表达式 ? 语句1 : 2
- 执行流程:
- 先对条件表达式求值判断
- 如果判断结果为true,则执行语句1,并将执行结果返回
- 如果判断结果为false 则执行语句2,并将执行结果返回
#### 运算符优先级
![](http://i.imgur.com/SfIUon2.png)