本文介绍JavaScript中的内置对象Math,以及Math的常用方法。

Math简单介绍

ECMAScript为我们提供了一个专门处理数学计算的内置对象——Math对象。Math对象提供了很多数学专业计算中可能会用到的特殊值(譬如 π)常量,以及封装好的工具函数(譬如 求N个数最大值、最小值、随机数、绝对值、平方根以及正玄和反余值等)。

这里先通过console.dir()方法打印Math对象的所有成员,我们可以通过下面列出的打印信息对Math对象有一个简单的了解。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
console.dir(Math);
Math
E: 2.718281828459045 //自然对数的底数,常量e的值
LN2: 0.6931471805599453 //2的自然对数
LN10: 2.302585092994046 //10的自然对数
LOG2E: 1.4426950408889634 //以2为底e的对数
LOG10E: 0.4342944819032518 //以10为底e的对数
PI: 3.141592653589793 //π的值
SQRT1_2: 0.7071067811865476 //1/2的平方根(2的平方根的倒数)
SQRT2: 1.4142135623730951 //2的平方根
abs: ƒ abs() //求参数的绝对值
acos: ƒ acos() //返回参数的反余弦值
acosh: ƒ acosh()
asin: ƒ asin() //返回参数的反正玄值
asinh: ƒ asinh()
atan: ƒ atan() //返回参数的反正切值
atan2: ƒ atan2() //Math.atan2(y,x) 返回y/x的反正切值
atanh: ƒ atanh()
cbrt: ƒ cbrt()
ceil: ƒ ceil() //执行向上舍入(将数值向上舍入为最接近的整数)
clz32: ƒ clz32()
cos: ƒ cos() //返回参数余弦值
cosh: ƒ cosh()
exp: ƒ exp() //返回Math.E的参数次幂
expm1: ƒ expm1()
floor: ƒ floor() //执行向下舍入(将数值向下舍入为最接近的整数)
fround: ƒ fround()
hypot: ƒ hypot()
imul: ƒ imul()
log: ƒ log() //返回参数的自然对数
log1p: ƒ log1p()
log2: ƒ log2()
log10: ƒ log10()
max: ƒ max() //返回参数列表中的最大值
min: ƒ min() //返回参数列表中的最小值
pow: ƒ pow() //Math.pow(n,p) 返回n的p次幂
random: ƒ random() //返回0~1之间的随机数
round: ƒ round() //执行标准的舍入(数学意义的舍入规则)
sign: ƒ sign()
sin: ƒ sin() //返回参数的正弦值
sinh: ƒ sinh()
sqrt: ƒ sqrt() //返回参数的平方根
tan: ƒ tan() //返回参数的正切值
tanh: ƒ tanh()
trunc: ƒ trunc()
Symbol(Symbol.toStringTag): "Math"
__proto__: Object

Math常用方法

Math.abs()方法返回参数值的绝对值。

1
2
console.log(Math.abs(16));              //16
console.log(Math.abs(-6)); //6

Math.max()方法返回参数之中最大的那个值,Math.min()返回参数列表中最小的那个值。如果参数为空, Math.min返回Infinity, Math.max返回-Infinity。

1
2
3
4
5
6
7
/*01-求参数列表的最大值和最小值*/
console.log(Math.max(2, -1, 5, 18)); // 18
console.log(Math.min(2, -1, 5, 21)); // -1

/*02-测试参数列表为空的情况*/
console.log(Math.min()); // Infinity
console.log(Math.max()); // -Infinity

Math.pow(x,y)方法返回以第一个参数为底数、第二个参数为幂的指数值,即求x的y次幂。

1
2
3
4
5
6
console.log(Math.pow(2,3));   //8     2的3次幂
console.log(Math.pow(2,-1)); //0.5 2的-1次幂

/*计算 圆的面积 = πr的平方*/
var radius = 20;
var area = Math.PI * Math.pow(radius, 2);

Math.round方法用于执行四舍五入操作。
Math.ceil()方法用于返回大于参数值的最小整数(天花板值)。
Math.floor()方法用于返回大于参数值的最大整数(地板值)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*01-Math.round() 执行正常的四舍五入操作*/
console.log(Math.round(0.1)); // 0
console.log(Math.round(0.5)); // 1
console.log(Math.round(0.6)); // 1
/*负值的处理*/
console.log(Math.round(-1.1)); // -1
console.log(Math.round(-1.5)); // -1 注意特殊情况
console.log(Math.round(-1.7)); // -2

/*02-Math.ceil() 大于参数值的最小整数*/
console.log(Math.ceil(3.1)); // 4
console.log(Math.ceil(3.5)); // 4
console.log(Math.ceil(3.9)); // 4
console.log(Math.ceil(-3.1)); //-3
console.log(Math.ceil(-3.5)); //-3
console.log(Math.ceil(-3.9)); //-3

/*03-Math.floor() 小于参数值的最大整数*/
console.log(Math.floor(3.1)); // 3
console.log(Math.floor(3.5)); // 3
console.log(Math.floor(3.9)); // 3
console.log(Math.floor(-3.1)); //-4
console.log(Math.floor(-3.5)); //-4
console.log(Math.floor(-3.9)); //-4

Math.sqrt()方法返回参数值的平方根,如果参数是一个负值,则返回NaN。

1
2
3
console.log(Math.sqrt(4));          //2
console.log(Math.sqrt(-4)); //NaN
console.log(Math.sqrt(9)); //3

Math.random()方法返回0到1之间的一个伪随机数,取值区间为[ 0 , 1 )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
console.log(Math.random());   //0.6260459147033315
console.log(Math.random()); //0.5273094529873636

/*封装两个生成随机数的方法*/
function getRandom(min, max) {
return Math.random() * (max - min) + min;
}

function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}

getRandom(1, 8) // 6.919178146646834
getRandomInt(1, 8) // 5
/*如果需要对结果取整,那么使用Math.floor或者是parseInt函数处理*/

Math对象除了上述工具函数外,还提供一系列的三角函数方法。

1
2
3
4
5
6
7
8
9
10
11
//Math.sin():返回参数的正弦      (参数为弧度值)
//Math.cos():返回参数的余弦 (参数为弧度值)
//Math.tan():返回参数的正切 (参数为弧度值)
//Math.asin():返回参数的反正弦 (返回值为弧度值)
//Math.acos():返回参数的反余弦 (返回值为弧度值)
//Math.atan():返回参数的反正切 (返回值为弧度值)

console.log(Math.sin(0)); // 0
console.log(Math.cos(0)); // 1
console.log(Math.tan(0)); // 0
console.log(Math.sin(Math.PI / 2)); // 1