112 lines
2.8 KiB
Markdown
112 lines
2.8 KiB
Markdown
# 运算符
|
||
|
||
## 术语
|
||
**运算元** ——运算符应用的对象 比如说 5*2 有两个运算元 左运算元5 和 右运算元2
|
||
|
||
如果一个运算符只对应一个运算元 那么就是一元运算符 如果一个运算符 对应两个运算元 那么他就是二元运算符
|
||
|
||
## 数学运算符
|
||
* 加 +
|
||
* 减 -
|
||
* 乘 *
|
||
* 除 /
|
||
* 取余 %
|
||
|
||
### +
|
||
1. 用来做加的数学运算
|
||
2. 如果被应用于字符串 就用来字符串连接
|
||
3. 作为一元运算符的时候 确定数值正负
|
||
|
||
## 运算符优先级
|
||
|
||
下表按从最高到最低的优先级列出JavaScript运算符。具有相同优先级的运算符按从左至右的顺序求值。
|
||
|
||
|运算符|优先级|
|
||
| ---- | ----|
|
||
|. [] ()|字段访问、数组下标、函数调用以及表达式分组|
|
||
|++ -- - ~ ! delete new typeof void|一元运算符、返回数据类型、对象创建、未定义值|
|
||
|* / %| 乘法、除法、取模|
|
||
|+ - +| 加法、减法、字符串连接|
|
||
|<< >> >>>|移位|
|
||
|< <= > >= instanceof|小于、小于等于、大于、大于等于、instanceof|
|
||
|== != === !==|等于、不等于、严格相等、非严格相等|
|
||
|&| 按位与|
|
||
|^| 按位异或|
|
||
|\|| 按位或|
|
||
|&&|逻辑与|
|
||
| \|\| |逻辑或|
|
||
|?:| 条件|
|
||
|=、+=、-=、*=、/=、%=、&=、\|=、^=、<、<=、>、>=、>>=| 混合赋值运算符 |
|
||
|,|逗号运算符|
|
||
|
||
## 赋值运算符 =
|
||
```=``` 是一个运算符 会返回一个值
|
||
``` x=5 ``` 的执行分为两步
|
||
把5给x
|
||
返回x的值
|
||
|
||
思考 ```let a=1; let b=2; let c=3-(a=b+1)``` 的执行过程
|
||
<details>
|
||
<summary>点击查看答案</summary>
|
||
根据运算符优先级规则,先运算()里面的a=b+1
|
||
|
||
对于 a=b+1, +的优先级大于=, 所以先运算b+1
|
||
|
||
b的值为2 所以=把b+1 也就是2+1的结果给a 并返回赋值后a的值 3
|
||
|
||
接下来,运算c=3-(...) 加减运算优先级大于赋值运算,所以 ()里运算的结果为3 所以 3-3=0
|
||
|
||
最终执行c=0 即把后面运算的结果0给c 然后 返回赋值后的c的值 0
|
||
|
||
注: 为了代码的可读性 应不要写这样的代码
|
||
|
||
</details>
|
||
|
||
### 链式赋值
|
||
```
|
||
a = b = c = 2 + 2;
|
||
```
|
||
链式赋值从右到左进行计算。首先,对最右边的表达式 2 + 2 求值,然后将其赋给左边的变量:c、b 和 a。最后,所有的变量共享一个值。
|
||
|
||
上面的代码和下面的是一样的:
|
||
|
||
```
|
||
c = 2 + 2;
|
||
b = c;
|
||
a = c;
|
||
|
||
```
|
||
## 运算同时赋值
|
||
这是把运算符和赋值两个操作的缩写形式
|
||
|
||
原来的:
|
||
```
|
||
let n = 2;
|
||
n = n + 5;
|
||
n = n * 2;
|
||
```
|
||
|
||
现在可以用+=,-+, *=, /=, %= ...来对上面的代码进行缩写
|
||
|
||
现在:
|
||
```
|
||
let n=2
|
||
n+=5
|
||
n*=2
|
||
alert(n)
|
||
```
|
||
这类运算符的优先级与普通赋值运算符的优先级相同,所以它们在大多数其他运算之后执行:
|
||
|
||
```
|
||
let n = 2;
|
||
|
||
n *= 3 + 5;
|
||
|
||
alert( n ); // 16 (右边部分先被计算,等同于 n *= 8)
|
||
```
|
||
|
||
## 自增、自减
|
||
* 自增
|
||
|
||
|
||
* 自减 |