九、数学运算符
9.1 概述
运算符是处理数据的基本方法,用来从现有的值得到新的值。
JavaScript 共提供10个算术运算符,用来完成基本的算术运算。
1 | 加法运算符: x + y |
减法、乘法、除法运算法比较单纯,就是执行相应的数学运算。
9.2 +
加法运算符
功能:
+
符号左右两边都不是字符串时,为加法+
符号左右两边只要有字符串,为连字符
1 | 3 + 5 // 8 |
注意,true
在做加法运算的时候,会被当做1
;false
在做加法运算的时候,会被当做0
:
1 | 3 + true; // 4 |
9.3 –
减法运算符
注意,减法没有字串符的顾虑了,纯数字字串符一律当作数字处理:
1 | 8 - 3 // 5 |
注意,true
在做减法运算的时候,会被当做1
;false
会被当做0
:
1 | 3 - true; // 2 |
特别的,如果这个字符串“不干净
”,不是纯的数字字符串,此时结果一律为NaN
:
1 | “8年” – 3 //NaN |
-
可以当作负号使用:
1 | 3 - -2 //5 |
9.4 *
乘法 /
除法 运算符
乘法和除法都不需要考虑字符串的顾虑,纯数字字符串能够被当做数字处理:
1 | 8 / 4 // 2 |
不纯的字符串,当作NaN
处理:
1 | “8年” * 2 // NaN |
乘除法的优先级相同,但是都比加减法优先级高:
1 | 1 + 2 * 3 // 7 |
如果要提升加减优先级,一律使用小括号:
1 | (1 + 2)* 3 // 9 |
注意,0
当除数的时候:
非零除以0,结果Infinity
0除以0,结果NaN
9.5 乘方 开方
Math
是JS
中内置的一个对象,里面蕴含了很多的数学运算
- 乘方
Math.pow( , )
:
1 | Math.pow(2,3); //2*2*2 8 |
从 ECMAScript 6
开始新增加了求幂运算,使用两个*
号代表求幂。以此可以代替以前的Math.pow()
方法
指数运算符(**
)完成指数运算,前一个运算子是底数,后一个运算子是指数:
1 | 2 ** 4 // 16 |
注意,指数运算符是右结合,而不是左结合。即多个指数运算符连用时,先进行最右边的计算:
1 | // 相当于 2 ** (3 ** 2) |
上面代码中,由于指数运算符是右结合,所以先计算第二个指数运算符,而不是第一个。
- 开方
Math.sqrt()
:
1 | Math.sqrt(81) //根号下81 9 |
案例:会将一个数学算式,转为计算机的写法:
注意圆括号别看错了:
1 | <script> |
9.6 取余运算符%
%
就是无视除法的结果,只看余数。是编程中特别常用的符号。
场景1:判断是否是偶数
只需要看这个数字%2
的结果是不是0
,就能判断这个数字是不是偶数
1 | 6 % 2 // 0 |
场景2:取余运算能够形成周而复始的情形
1 | 0 % 4 // 0 |
场景3:能够帮助我们从一个精灵图片中取元素
比如下图,每排8
个精灵元素。现在要取第17
号,它就是编号为2
排的编号为1
的那个。注意,所有序号都是从0
开始数。
取余运算的优先级和乘除相等
1 | 5 * 4 % 10 // 0 |
9.7 自增运算符 ++
自减运算符- -
能够让a
自增:
a++;
等价于
a = a + 1;
比如:
1 | <script> |
但真正了解a++不容易:
1 | <script> |
a++
,会“先用再加
”。也就是说,会先把a的原数输出了,然后a自增1。
1 | <script> |
为了解决不便利的问题,可以把++
前置,此时就是++a
“先加再用
”。
1 | <script> |
例1:
1 | <script> |
例2:
例3:
1 | <script> |