[TOC]
# JavaScript运算符
## **一、算术运算符**
  运算符又叫操作符( operator ),编程中常见的运算符包括 算术运算符,一元运算符,逻辑运算符,关系运算符,赋值运算符等。
<br>
### **算术运算符(数学运算符)**
  常用的算术运算符有 + - \* / %(取余)
```
var x = 5;
var y = 6;
console.log(x + y); //11
console.log(x - y); //-1
console.log(x * y); //30
console.log(x / y); //0.8333333333
console.log(x / 0);//Infinity:无穷大
console.log(x % 0);//NaN
```
<br>
### **表达式和语句**
#### **表达式**
  表达式是**由操作数和操作符(运算符)组合而成的代码片段**, 要学习运算符就必须要知道表达式是什么以及表达式的作用,以下是介绍表达式的组成和特点.
>[info]1、组成:表达式是由操作符和操作数组成。
> 如:5+6,num1+num2,!true
> 输出表达式的结果:console.log(num1+num);
>
> 2、特点
> 结果:一个表达式可以产生一个结果;
> 如 !true -> false, 8-3 -> 5,6==11 -> false
> 位置:表达式可以放在任何需要值的地方;
#### **语句**
  语句是构成程序的元素,可以看作程序的一个行为,也可以认为是计算机执行某种操作的指令。循环语句和判断语句就是典型的语句。程序中一般使用分号 ";" 分割语句,一个程序可能有多个语句组成。
如:var num = 5;
*****
<br>
## **二、一元运算符**
  只有一个操作数的运算符叫一元运算符,如 ++8 中的 ++ 运算符。!true中的 ! 常用的一元运算符有 ++、-- 和 !,由于 ! 是做逻辑运算的,我们又把它归类为逻辑运算符。下面我们先来学习 ++ 和 -- ,++ 又分为 前置++ 和 后置++,-- 又分为 前置-- 和 后置--。我们这节课只学习前置++和后置++,大家可以通过举一反三的思想来学习前置--和后置-- 。
  在做一元运算符操作的时候,表达式的作用体现得非常重要。在 ++ 和 -- 运算中,不管是前置还是后置,表达式的执行过程都只有两个步骤,分别是 **执行运算** 和 **返回表达式的结果**。具体操作如下。
<br>
### **前置++**
  表达式的执行过程如下
 步骤一:执行操作数的++运算(自身加 1);
 步骤二:操作数作为表达式的结果返回;
```
var num1 = 8;
++num1;//自身加1
console.log(num1);//输出结果
var num2 = 6;
console.log(++num2);
console.log(num1 + ++num2);
```
<br>
### **后置++**
  表达式的执行过程如下
 步骤一:操作数作为表达式的结果返回;
 步骤二:执行操作数的++运算(自身加 1);
```
var num1 = 5;
num1++;//自身加1
console.log(num1);//输出结果
var num2 = 6;
console.log(num1 + num2++);
```
<br>
## **三、逻辑运算符(布尔运算符)**
  逻辑运算符(布尔运算符)是针对布尔类型的值进行运算的,JS中的逻辑运算符有以下三种。
  逻辑与(**&&** ),若两个操作数同时为true,则表达式的运算结果为true,否则运算结果为false;
  逻辑或(**||**),若两个操作数中有一个为true,则表达式的运算结果为true,否则运算为false;逻辑非(**!**),取反;
  注意:逻辑运算符的表达式返回的结果总是 **布尔类型**,即**true** 或 **false**。
```
var bool01 = true;
var bool02 = true;
var bool03 = false;
console.log(bool01 && bool03); //输出结果:true
console.log(bool01 || bool03); //输出结果:true
console.log(!bool03); //输出结果:false
```
<br>
## **四、关系运算符(比较运算符)**
  关系运算符 是用于比较两个操作数的大小或相等的,关系运算符的表达式返回的结果是布尔类型,即 true 或 false。
  小于:<
  大于: >
  大于等于: >=
  小于等于: <=
  等于: ==
  不等于: !=
  全等于: ===
  全不等于: !==
```
var salary01 = 8000;
var salary02 = 10000;
var salary03 = '10000';
console.log(salary01 > salary02);//false
console.log(salary01 < salary02);//true
console.log(salary01 >= salary02);//false
console.log(salary01 <= salary02);//true
console.log(salary01 == salary02);//false
console.log(salary01 != salary02);//true
console.log(salary01 === salary02);//false
console.log(salary01 !== salary02);//true
// ==与===的区别
// ==只进行值的比较,值相同则返回true,===会进行类型和值的比较,两者都相同,则返回true,否则返回false
console.log(salary02 == salary03);//true
console.log(salary02 === salary03);//false
```
<br>
## **五、赋值运算符**
  赋值运算符的作用是将运算符右边的表达式的结果值赋给运算符左边的变量,如 var y=x+3; 开发中常用赋值运算符如下:
  赋值: =
  加赋值: +=
  减赋值: -=
  乘赋值: \*=
  除赋值: /=
  求余赋值: %=
```
// =(赋值)
var num = 10;
console.log(num);
//+=(加赋值)
num += 5; // 等效于 num = num + 5;
console.log(num);
// -=(减赋值)
num -= 5;//等效于num = num - 5;
console.log(num);
// *=(乘赋值)
num *= 5;//等效于num = num * 5;
console.log(num);
// /= (除赋值)
num /= 5;//等效于num = num / 5;
console.log(num);
// %=(求余赋值)
num %= 5; // 等效于 num = num % 5;
console.log(num);
```
<br>
<br>
## **运算符的优先级**
  以下运算符优先级排序中,! 既是一元运算符,又是逻辑运算符,由于一元运算符比逻辑运算符的优先级高,所以我们把 ! 归类到一元运算符中。关系运算符中的 “比较大小” 和 “比较相等” 的优先级也不一样,我们也将它分为关系运算符和相等运算符来处理。
  运算符优先级可以改变表达式的运算顺序。
>[info]优先级从高到底
1. () 优先级最高
2. 一元运算符 ++ -- !
3. 算术运算符 先* / % 后 + -
4. 关系运算符(比较大小) > >= < <=
5. 相等运算符(比较相等) == != === !==
6. 逻辑运算符 先&& 后||
7. 赋值运算符 = += -= *= /= %=