首先进行一个术语的定义
1.运算元---------运算符应用的对象。比如说减法运算符7-2,有两个运算元:左边7和右边2。
2.二元运算符:向上面的减法运算符,有两个运算元,那么他就是二元运算符。
3.一元运算符:-不光能做减法用,也可以是负号运算。x=-x,那么此时他就是一元运算符。
一、数学运算符
- 加法:+
- 减法:-
- 乘法:*
- 除法:/
- 取余:%
- 求幂:**
这里重点说一下%和**
1.取余:%
a%b 的结果是 a 整除 b的余数
比如
2.求幂**
a**b 即为 a乘以自身 b次
比如
二、用二元运算符 + 连接字符串
通常情况下,加号+用于求和;
但是如果加号+被应用于字符串,他将合并各个字符串,哪怕只有一个运算元是字符串。
因为一个是数字,一个是字符串,所以就会拼串
在这里,运算符是按照顺序工作,第一个+将两个数字相加,返回4,然后下一个+将字符串‘1’进行拼串。
二元 ‘+’ 是唯一一个这种方式支持字符串的运算符,其他运算符只对数字起作用,并且总是将其运算元转换成数字。
三、数字转化,一元运算符 +
Number(...)
- ‘+’ 会将其转化为数字。
- 对于将字符串转化为数字的需求,但是两个字符串直接相加又会拼串,那么我们应该如下操作:
let apples = "2";
let oranges = "3";
// 在二元运算符加号起作用之前,所有的值都被转化为了数字
alert( +apples + +oranges ); // 5
//更长的写法
alert( Number(apples) + Number(oranges) ); // 5
为什么一元运算符先于二元运算符作用于元?显然因为优先级,一元运算符优先与二元运算符
下面是优先级表,数越大优先级越高
四、赋值运算符
- 从上面我们可以看到赋值运算符的优先级很低。这也就是 为什么我们在赋值过程中都是计算先执行的原因。
- 赋值=返回一个值
‘=’ 是一个运算符,语句 x= value 将值value写入x ,然后返回 x。
但是平常不要这么写代码,一点都不清晰可读
- 链式赋值
链式赋值从右到左进行计算,最后所有的变量共享一个值
但是处于可读性,这样的代码最好分成几行写
五、原地修改
对一个变量做运算,并将新的结果存储在同一个变量中。
可用运算符 += 和 *=
/= 和 -= 等
六、自增/自减
- 自增 ++:将变量与1相加
- -- :将变量与1 相减
那么将运算符至于变量的前后(counter ++、++counter)又有什么区别吗,首先他们的共同点就是:将变量与1 相加/相减,区别是:
1.前置形式返回一个新的值
2.后置返回原来的值(做加法、减法之前的值)
自增自减的优先级要比绝大部分运算符高
七、位运算符
- 按位与( & )
- 按位或( |
- 按位异或( ^ )
- 按位非( ~ )
- 左移( << )
- 右移( >> )
- 无符号右移( >>> )
八、逗号运算符 ‘ ,
该运算符能让我们处理多个语句,使用逗号运算符将它们分开,每个语句都运行了,但是只有最后的语句的结果会被返回
注意:逗号的运算优先级非常低,比 = 还要低,因此例子里面的括号非常重要
练习:
1.后置运算符和前置运算符
2.类型转换