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