webveuje/js/kejian/day3.md
2021-02-02 17:27:36 +08:00

2.8 KiB
Raw Blame History

运算符

术语

运算元 ——运算符应用的对象 比如说 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) 的执行过程

点击查看答案 根据运算符优先级规则,先运算()里面的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

注: 为了代码的可读性 应不要写这样的代码

链式赋值

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

自增、自减

  • 自增

  • 自减