JS运算符

## 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)

原文地址:https://www.cnblogs.com/huifang/p/7342017.html