# 运算符

## 基本运算符

**示例代码：**
```wxs
var a = 10, b = 20;

// 加法运算
console.log(30 === a + b);
// 减法运算
console.log(-10 === a - b);
// 乘法运算
console.log(200 === a * b);
// 除法运算
console.log(0.5 === a / b);
// 取余运算
console.log(10 === a % b);
```

- 加法运算（`+`）也可以用作字符串的拼接。

```wxs
var a = '.w' , b = 'xs';

// 字符串拼接
console.log('.wxs' === a + b);
```

## 一元运算符

**示例代码：**
```wxs
var a = 10, b = 20;

// 自增运算
console.log(10 === a++);
console.log(12 === ++a);
// 自减运算
console.log(12 === a--);
console.log(10 === --a);
// 正值运算
console.log(10 === +a);
// 负值运算
console.log(0-10 === -a);
// 否运算
console.log(-11 === ~a);
// 取反运算
console.log(false === !a);
// delete 运算
console.log(true === delete a.fake);
// void 运算
console.log(undefined === void a);
// typeof 运算
console.log("number" === typeof a);
```

## 位运算符
**示例代码：**
```wxs
var a = 10, b = 20;

// 左移运算
console.log(80 === (a << 3));
// 带符号右移运算
console.log(2 === (a >> 2));
// 无符号右移运算
console.log(2 === (a >>> 2));
// 与运算
console.log(2 === (a & 3));
// 异或运算
console.log(9 === (a ^ 3));
// 或运算
console.log(11 === (a | 3));
```

## 比较运算符
**示例代码：**
```wxs
var a = 10, b = 20;

// 小于
console.log(true === (a < b));
// 大于
console.log(false === (a > b));
// 小于等于
console.log(true === (a <= b));
// 大于等于
console.log(false === (a >= b));
```

## 等值运算符
**示例代码：**
```wxs
var a = 10, b = 20;

// 等号
console.log(false === (a == b));
// 非等号
console.log(true === (a != b));
// 全等号
console.log(false === (a === b));
// 非全等号
console.log(true === (a !== b));
```

## 赋值运算符

**示例代码：**
```wxs
var a = 10;

a = 10; a *= 10;
console.log(100 === a);
a = 10; a /= 5;
console.log(2 === a);
a = 10; a %= 7;
console.log(3 === a);
a = 10; a += 5;
console.log(15 === a);
a = 10; a -= 11;
console.log(-1 === a);
a = 10; a <<= 10;
console.log(10240 === a);
a = 10; a >>= 2;
console.log(2 === a);
a = 10; a >>>= 2;
console.log(2 === a);
a = 10; a &= 3;
console.log(2 === a);
a = 10; a ^= 3;
console.log(9 === a);
a = 10; a |= 3;
console.log(11 === a);
```

## 二元逻辑运算符
**示例代码：**
```wxs
var a = 10, b = 20;

// 逻辑与
console.log(20 === (a && b));
// 逻辑或
console.log(10 === (a || b));
```

## 其他运算符
**示例代码：**
```wxs
var a = 10, b = 20;

//条件运算符
console.log(20 === (a >= 10 ? a + 10 : b + 10));
//逗号运算符
console.log(20 === (a, b));
```

## 运算符优先级

| 优先级 | 运算符              | 说明       | 结合性   |
| ------ | ------------------- | ---------- | -------- |
| 20     | `(` ... `)`         | 括号       | n/a      |
| 19     | ... `.` ...         | 成员访问   | 从左到右 |
|        | ... `[` ... `]`     | 成员访问   | 从左到右 |
|        | ... `(` ... `)`     | 函数调用   | 从左到右 |
| 17     | ... `++`            | 后置递增   | n/a      |
|        | ... `--`            | 后置递减   | n/a      |
| 16     | `!` ...             | 逻辑非     | 从右到左 |
|        | `~` ...             | 按位非     | 从右到左 |
|        | `+` ...             | 一元加法   | 从右到左 |
|        | `-` ...             | 一元减法   | 从右到左 |
|        | `++` ...            | 前置递增   | 从右到左 |
|        | `--` ...            | 前置递减   | 从右到左 |
|        | `typeof` ...        | typeof     | 从右到左 |
|        | `void` ...          | void       | 从右到左 |
|        | `delete` ...        | delete     | 从右到左 |
| 14     | ... `*` ...         | 乘法       | 从左到右 |
|        | ... `/` ...         | 除法       | 从左到右 |
|        | ... `%` ...         | 取模       | 从左到右 |
| 13     | ... `+` ...         | 加法       | 从左到右 |
|        | ... `-` ...         | 减法       | 从左到右 |
| 12     | ... `<<` ...        | 按位左移   | 从左到右 |
|        | ... `>>` ...        | 按位右移   | 从左到右 |
|        | ... `>>>` ...       | 无符号右移 | 从左到右 |
| 11     | ... `<` ...         | 小于       | 从左到右 |
|        | ... `<=` ...        | 小于等于   | 从左到右 |
|        | ... `>` ...         | 大于       | 从左到右 |
|        | ... `>=` ...        | 大于等于   | 从左到右 |
| 10     | ... `==` ...        | 等号       | 从左到右 |
|        | ... `!=` ...        | 非等号     | 从左到右 |
|        | ... `===` ...       | 全等号     | 从左到右 |
|        | ... `!==` ...       | 非全等号   | 从左到右 |
| 9      | ... `&` ...         | 按位与     | 从左到右 |
| 8      | ... `^` ...         | 按位异或   | 从左到右 |
| 7      | ... `｜` ...        | 按位或     | 从左到右 |
| 6      | ... `&&` ...        | 逻辑与     | 从左到右 |
| 5      | ... `｜｜` ...      | 逻辑或     | 从左到右 |
| 4      | ... `?` ... `:` ... | 条件运算符 | 从右到左 |
| 3      | ... `=` ...         | 赋值       | 从右到左 |
|        | ... `+=` ...        | 赋值       | 从右到左 |
|        | ... `-=` ...        | 赋值       | 从右到左 |
|        | ... `*=` ...        | 赋值       | 从右到左 |
|        | ... `/=` ...        | 赋值       | 从右到左 |
|        | ... `%=` ...        | 赋值       | 从右到左 |
|        | ... `<<=` ...       | 赋值       | 从右到左 |
|        | ... `>>=` ...       | 赋值       | 从右到左 |
|        | ... `>>>=` ...      | 赋值       | 从右到左 |
|        | ... `&=` ...        | 赋值       | 从右到左 |
|        | ... `^=` ...        | 赋值       | 从右到左 |
|        | ... `｜=` ...       | 赋值       | 从右到左 |
| 0      | ... `,` ...         | 逗号       | 从左到右 |
