Math 对象

JS 中,基本的算数运算可以用算数运算符。若想实现更复杂的算数运算,则通过 Math 对象定义的常量和函数来实现。

与其他对象不同,Math 只是一个静态对象,它没有构造函数;

实际上,Math 只是一个由 JS 设置的对象命名空间,用来存储数学常量和函数。


常量

Math 对象一共有 8 个常量,可以分为:对数、派值和平方根三类。

1. 对数

   Math.E             自然对数的底数,即常量e的值(约等于2.71828)
   Math.LN2           2的自然对数(约等于0.693)
   Math.LN10          10的自然对数(约等于2.303)
   Math.LOG2E         以2为底e的对数(约等于1.443)
   Math.LOG10E        以10为底e的对数(约等于0.434)

2. 派值

   Math.PI            派的值(约等于3.14)

3. 平方根

   Math.SQRT2         2的平方根(约等于1.414)
   Math.SQRT1_2       1/2的平方根,即2的平方根的倒数(约等于0.707)

函数

Math对象一共有 18 个静态函数,主要包括最值、舍入、随机数、绝对值、三角函数及乘方开方 6 类。

需要注意的是,这些函数都涉及到 Number() 隐式类型转换,若超出范围,将返回NaN。


[ 最值 ] Math对象的 min() 和 max() 方法用于确定一组数值中的最小和最大值,这两个方法都可以接收任意个数值参数。

  • Math.max()  返回参数中最大值
  • Math.min()  返回参数中最小值
   Math.max(1,2,3);   // 3
   Math.min(1,2,3);   // 1

// 如果没有参数则返回Infinity。

   Math.max();   // infinity
   Math.min();   // infinity

// 如果任意一个参数是NaN或不可转换为数字,则返回NaN。

   Math.max(1,2,'3px'); // NaN
   Math.min(1,2,'3px');  // NaN

// 代码示例

// 找到数组中的最大 / 最小值

   var values = [1,2,3,4,5,6,7,8];
   var maxValue = Math.max.apply(Math,values);    // 8
   var minValue = Math.min.apply(Math,values);    // 1

// 当我们在一个表单中需要一个合法的月份值时,可以使用:
   Math.min(Math.max(1,input),12);

[ 舍入 ] Math对象一共有 3 种小数舍入为整数的方法:

  • Math.ceil() 向上取整,即,返回大于等于函数参数的最接近的整数。
  • Math.floor() 向下取整,即,返回小于等于函数参数的最接近的整数
  • Math.round() 按四舍五入进行取整运算
Math.ceil(12.6);   // 13
Math.floor(12.6);   // 12
Math.round(12.6);   // 13
Math.ceil(-12.6);   // -12
Math.floor(-12.6);   // -13
Math.round(-12.6);   // -13

[ 随机数 ] Math.random() 用于返回 [0,1) 的一个随机数

利用 Math.random() 套用公式,可以从某个整数范围内随机选择一个值
    值 = Math.floor(Math.random() * 可能值的总数 + 第一个可能的值)
    
       // 代码示例:返回一个1-10之间的整数值
       var num = Math.floor(Math.random() * 10 + 1)

多数情况下,已知条件是首尾值
    var num = Math.floor(Math.random()*(upperValue - lowerValue + 1) + lowerValue);

// 代码示例:简单应用

// 从数组中随机取出一项
   var colors = [1,2,3,4,5,6];
   var color = colors[Math.floor(Math.random()*colors.length)];

// 取得随机的01值
    Math.round(Math.random())

// 长度一致的随机数

   var random = Math.random();
   var random = random + '0000000000';
   var random = random.slice(0,10);
   console.log(random);

[ 绝对值 ]Math.abs() 返回任意数值的绝对值

Math.abs(-1);   // 1
Math.abs('1px');   // NaN
Math.abs(1,2,3);   // 1

[ 三角函数 ]7个常用三角函数:正弦、余弦、正切、反正弦、反余弦、反正切及y/x的反正切值

  • Math.sin(x) 返回x的正弦值,返回值介于-1到1之间
  • Math.cos(x) 返回x的余弦值,返回值介于-1到1之间
  • Math.tan(x) 返回x的正切值。

// x是一个以弧度制度量的角度,如果想将角度制转为弧度制,可以将角度制的值乘以0.017(2派/360)

  • Math.asin(x) 返回x的反正弦值,返回值介于-派/2到派/2弧度之间(x必须是-1到1之间的数)
  • Math.acos(x) 返回x的反余弦值,返回值介于0到派弧度之间(x必须是-1到1之间的数)
  • Math.atan(x) 返回x的反正切值,返回值介于-派/2到派/2弧度之间
  • Math.atan2(y,x) 返回y/x的反正切值,返回值介于-派到派可以将y看做一个点的y坐标,x看做点的x坐标。

// y坐标在x坐标前面

Math.sin(30*Math.PI/180);   // 0.49999999999999994    
Math.cos(60*Math.PI/180);   // 0.5000000000000001
Math.tan(45*Math.PI/180);   // 0.9999999999999999    
Math.asin(1)*180/Math.PI;   // 90
Math.acos(1)*180/Math.PI;   // 0
Math.atan(1)*180/Math.PI;   // 45
Math.atan2(1,1)*180/Math.PI;   // 45

[ 乘方开方 ] Math对象涉及到乘方开方的函数,共有4个:

  • Math.exp(num)  返回Math.E的num次幂,即enum
Math.exp(0);   // 1
Math.exp(1);   // 2.718281828459045
  • Math.log(num)  返回num的自然对数,logenum(num必须是大于等于0的数)
log10x = 1og10e * logex 
log2x = log2e * logex

function log10(x){
    return Math.LOG10E * Math.log(x);
}
function log2(x){
    return Math.LOG2E * Math.log(X);
}

console.log(Math.log(1));//0
console.log(Math.log(Math.E));//1
  • Math.sqrt(num)  返回num的平方根(x必须是大于等于0的数)
Math.sqrt(100);   // 10
Math.sqrt(1);   // 1
  • Math.pow(num,power)  返回num的power次幂
Math.pow(10,2);   // 100
Math.pow(100,1/2);   // 10