九、数学运算符

九、数学运算符

9.1 概述

运算符是处理数据的基本方法,用来从现有的值得到新的值。

JavaScript 共提供10个算术运算符,用来完成基本的算术运算。

1
2
3
4
5
6
7
8
9
10
加法运算符:    x + y
减法运算符:  x - y
乘法运算符:  x * y
除法运算符: x / y
指数运算符: x ** y
余数运算符: x % y
自增运算符: ++x 或者 x++
自减运算符: --x 或者 x--
数值运算符:  +x
负数值运算符: -x

减法、乘法、除法运算法比较单纯,就是执行相应的数学运算。

9.2 + 加法运算符

功能:

  • +符号左右两边都不是字符串时,为加法

  • +符号左右两边只要有字符串,为连字符

1
2
3
3 + 5              // 8
3” + 5 // ”35”
3” + “5// ”35”

注意,true在做加法运算的时候,会被当做1false在做加法运算的时候,会被当做0:

1
2
3
4
5
3 + true;               // 4
5 +false; // 5
true + false; // 1
true + true +true; // 3
false + 'a' // "falsea"

9.3 减法运算符

注意,减法没有字串符的顾虑了,纯数字字串符一律当作数字处理:

1
2
3
4
8 - 3              // 5
8” - 3 // 5
8” - “3// 5
8.2” – “0.2// 8

注意,true在做减法运算的时候,会被当做1false会被当做0:

1
2
3 - true;           // 2
true - false; // 1

特别的,如果这个字符串“不干净”,不是纯的数字字符串,此时结果一律为NaN:

1
2
3
4
8年” – 3               //NaN
123xyz” – “xyz” //NaN
3 – “true//NaN
3 – “false//NaN

-可以当作负号使用:

1
3 - -2                   //5

9.4 *乘法 /除法 运算符

乘法和除法都不需要考虑字符串的顾虑,纯数字字符串能够被当做数字处理:

1
2
3
8 / 4              // 2
4 * 8 // 32
4” * “8// 32

不纯的字符串,当作NaN处理:

1
2
8年” * 2           // NaN
true” * 3 // NaN

乘除法的优先级相同,但是都比加减法优先级高:

1
2
3
1 + 2 * 3             // 7
3 / 3 + 8 / 8 // 2
6 / 3 * 2 + 1 // 5

如果要提升加减优先级,一律使用小括号:

1
1 + 2)* 3           // 9

注意,0当除数的时候:

  • 非零除以0,结果Infinity

  • 0除以0,结果NaN

Upyqjx.png

9.5 乘方 开方

MathJS中内置的一个对象,里面蕴含了很多的数学运算

  • 乘方Math.pow( , ):
1
2
Math.pow(2,3);                 //2*2*2           8
Math.pow(5,2); //5*5 25

ECMAScript 6 开始新增加了求幂运算,使用两个*号代表求幂。以此可以代替以前的Math.pow()方法

指数运算符(**)完成指数运算,前一个运算子是底数,后一个运算子是指数:

1
2 ** 4          // 16

注意,指数运算符是右结合,而不是左结合。即多个指数运算符连用时,先进行最右边的计算:

1
2
3
// 相当于 2 ** (3 ** 2)
2 ** 3 ** 2
// 512

上面代码中,由于指数运算符是右结合,所以先计算第二个指数运算符,而不是第一个。

  • 开方 Math.sqrt():
1
2
Math.sqrt(81)                    //根号下81     9
Math.sqrt(100) //根号下100 10

案例:会将一个数学算式,转为计算机的写法:

注意圆括号别看错了:

1
2
3
4
<script>
var result = (2 +Math.pow( 5 , 3)) / 3 * Math.sqrt((3050 - 8) / 2);
alert(result);
</script>

UpcFJJ.png

9.6 取余运算符%

%就是无视除法的结果,只看余数。是编程中特别常用的符号。

场景1:判断是否是偶数

只需要看这个数字%2的结果是不是0,就能判断这个数字是不是偶数

1
2
6 % 2       // 0
7 % 2 // 1

场景2:取余运算能够形成周而复始的情形

1
2
3
4
5
6
7
8
9
10
11
0 % 4            // 0
1 % 4 // 1
2 % 4 // 2
3 % 4 // 3
4 % 4 // 0
5 % 4 // 1
6 % 4 // 2
7 % 4 // 3
8 % 4 // 0
9 % 4 // 1
10 % 4 // 2

场景3:能够帮助我们从一个精灵图片中取元素

比如下图,每排8个精灵元素。现在要取第17号,它就是编号为2排的编号为1的那个。注意,所有序号都是从0开始数。

UpcJyt.png

取余运算的优先级和乘除相等

1
2
5 * 4 % 10           // 0
5 % (true + 1) * 3 // 3

9.7 自增运算符 ++ 自减运算符- -

能够让a自增:

a++;

等价于

a = a + 1;

比如:

1
2
3
4
5
<script>
var a = 3;
a++;
console.log(a); // 结果为 4
</script>

但真正了解a++不容易:

1
2
3
4
<script>
var a = 3;
console.log(a++); // 结果为 3
</script>

a++,会“先用再加”。也就是说,会先把a的原数输出了,然后a自增1。

1
2
3
4
5
6
<script>
var a = 3;
var b = a++; // 先用再加 先把b = a输出
console.log(a); // 结果为 4
console.log(b); // 结果为 3
</script>

为了解决不便利的问题,可以把++前置,此时就是++a先加再用”。

1
2
3
4
5
6
<script>
var a = 3;
var b = ++a;
console.log(a); // 结果为 4
console.log(b); // 结果为 4
</script>

例1:

1
2
3
4
5
6
<script>
var a = 5;
var b = 3;
var c = a++ + ++b; // 5+4
console.log(c); // 结果为 9
</script>

例2:

UpcXkD.png

例3:

1
2
3
4
5
6
<script>
var a = 3;
var b = 4;
var c = a++ + b++ + ++a + b++; // 3+4+5+6
console.log(c); // 结果为 18
</script>
点击查看

本文标题:九、数学运算符

文章作者:Mango

发布时间:2020年07月08日 - 21:34:41

最后更新:2020年07月08日 - 22:35:39

原始链接:https://mango185.github.io/post/8c67c94e.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------------本文结束 感谢您的阅读-------------------