Math 对象
Math 对象是 JavaScript 的内置对象,提供了数学常数和数学函数的属性和方法。与其它全局对象不同,Math 不是一个构造函数,它的所有属性和方法都是静态的,直接通过 Math 对象调用。
Math 常数
Math 对象提供了一些常用的数学常数:
javascript
console.log(Math.E); // 2.718281828459045 (自然对数的底数)
console.log(Math.PI); // 3.141592653589793 (圆周率)
console.log(Math.SQRT2); // 1.4142135623730951 (2 的平方根)
console.log(Math.SQRT1_2); // 0.7071067811865476 (1/2 的平方根)
console.log(Math.LN2); // 0.6931471805599453 (2 的自然对数)
console.log(Math.LN10); // 2.302585092994046 (10 的自然对数)
console.log(Math.LOG2E); // 1.4426950408889634 (以 2 为底 E 的对数)
console.log(Math.LOG10E); // 0.4342944819032518 (以 10 为底 E 的对数)基本数学函数
绝对值、向上取整、向下取整、四舍五入
javascript
// 绝对值
console.log(Math.abs(-5)); // 5
console.log(Math.abs(3.7)); // 3.7
// 向上取整
console.log(Math.ceil(4.2)); // 5
console.log(Math.ceil(-4.7)); // -4
// 向下取整
console.log(Math.floor(4.7)); // 4
console.log(Math.floor(-4.2)); // -5
// 四舍五入
console.log(Math.round(4.4)); // 4
console.log(Math.round(4.5)); // 5
console.log(Math.round(-4.5)); // -4
// 截断小数部分
console.log(Math.trunc(4.7)); // 4
console.log(Math.trunc(-4.7)); // -4最大值和最小值
javascript
console.log(Math.max(1, 5, 3, 9, 2)); // 9
console.log(Math.min(1, 5, 3, 9, 2)); // 1
// 对于数组,需要使用扩展运算符
let numbers = [1, 5, 3, 9, 2];
console.log(Math.max(...numbers)); // 9
console.log(Math.min(...numbers)); // 1幂运算和平方根
javascript
// 幂运算
console.log(Math.pow(2, 3)); // 8 (2 的 3 次方)
console.log(Math.pow(4, 0.5)); // 2 (4 的平方根)
// 平方根
console.log(Math.sqrt(16)); // 4
console.log(Math.sqrt(2)); // 1.4142135623730951
// 立方根
console.log(Math.cbrt(27)); // 3
// 对数
console.log(Math.log(Math.E)); // 1 (自然对数)
console.log(Math.log10(100)); // 2 (以 10 为底的对数)
console.log(Math.log2(8)); // 3 (以 2 为底的对数)三角函数
javascript
// 三角函数(参数为弧度)
console.log(Math.sin(Math.PI / 2)); // 1 (sin 90°)
console.log(Math.cos(0)); // 1 (cos 0°)
console.log(Math.tan(Math.PI / 4)); // 1 (tan 45°)
// 反三角函数
console.log(Math.asin(1)); // 1.5707963267948966 (π/2)
console.log(Math.acos(0)); // 1.5707963267948966 (π/2)
console.log(Math.atan(1)); // 0.7853981633974483 (π/4)
// atan2 函数
console.log(Math.atan2(1, 1)); // 0.7853981633974483 (π/4)随机数生成
javascript
// 生成 0 到 1 之间的随机数
console.log(Math.random()); // 例如:0.8442154321454321
// 生成指定范围的随机整数
function randomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
console.log(randomInt(1, 10)); // 1 到 10 之间的随机整数
// 生成指定范围的随机浮点数
function randomFloat(min, max) {
return Math.random() * (max - min) + min;
}
console.log(randomFloat(1.5, 5.5)); // 1.5 到 5.5 之间的随机浮点数双曲函数
javascript
console.log(Math.sinh(1)); // 1.1752011936438014
console.log(Math.cosh(1)); // 1.5430806348152437
console.log(Math.tanh(1)); // 0.7615941559557649
console.log(Math.asinh(1)); // 0.881373587019543
console.log(Math.acosh(2)); // 1.3169578969248166
console.log(Math.atanh(0.5)); // 0.5493061443340548符号函数和指数函数
javascript
// 符号函数
console.log(Math.sign(5)); // 1
console.log(Math.sign(-3)); // -1
console.log(Math.sign(0)); // 0
// 指数函数
console.log(Math.exp(1)); // 2.718281828459045 (e^1)
console.log(Math.expm1(1)); // 1.718281828459045 (e^1 - 1)
// 超越函数
console.log(Math.clz32(1000)); // 22 (32 位二进制表示中前导零的个数)实际应用示例
角度与弧度转换
javascript
// 角度转弧度
function degreesToRadians(degrees) {
return degrees * Math.PI / 180;
}
// 弧度转角度
function radiansToDegrees(radians) {
return radians * 180 / Math.PI;
}
console.log(degreesToRadians(90)); // 1.5707963267948966 (π/2)
console.log(radiansToDegrees(Math.PI)); // 180生成随机颜色
javascript
function randomColor() {
let r = Math.floor(Math.random() * 256);
let g = Math.floor(Math.random() * 256);
let b = Math.floor(Math.random() * 256);
return `rgb(${r}, ${g}, ${b})`;
}
console.log(randomColor()); // 例如:rgb(123, 45, 67)计算两点间距离
javascript
function distance(x1, y1, x2, y2) {
let dx = x2 - x1;
let dy = y2 - y1;
return Math.sqrt(dx * dx + dy * dy);
}
console.log(distance(0, 0, 3, 4)); // 5数值格式化
javascript
// 保留指定小数位数
function roundToDecimal(number, decimals) {
let factor = Math.pow(10, decimals);
return Math.round(number * factor) / factor;
}
console.log(roundToDecimal(3.14159, 2)); // 3.14
console.log(roundToDecimal(123.456, 1)); // 123.5数组统计
javascript
function arrayStats(arr) {
let sum = arr.reduce((a, b) => a + b, 0);
let mean = sum / arr.length;
let variance = arr.reduce((a, b) => a + Math.pow(b - mean, 2), 0) / arr.length;
let stdDev = Math.sqrt(variance);
return {
sum: sum,
mean: mean,
min: Math.min(...arr),
max: Math.max(...arr),
variance: variance,
stdDev: stdDev
};
}
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.log(arrayStats(numbers));高级数学函数
超越函数应用
javascript
// 计算复利
function compoundInterest(principal, rate, time, compoundFrequency) {
return principal * Math.pow(1 + rate / compoundFrequency, compoundFrequency * time);
}
console.log(compoundInterest(1000, 0.05, 10, 12)); // 1647.0095...
// 正态分布概率密度函数
function normalPDF(x, mean, stdDev) {
let variance = stdDev * stdDev;
let numerator = Math.exp(-Math.pow(x - mean, 2) / (2 * variance));
let denominator = Math.sqrt(2 * Math.PI * variance);
return numerator / denominator;
}
console.log(normalPDF(0, 0, 1)); // 0.3989422804014327几何计算
javascript
// 计算圆的面积
function circleArea(radius) {
return Math.PI * radius * radius;
}
// 计算球体体积
function sphereVolume(radius) {
return (4/3) * Math.PI * Math.pow(radius, 3);
}
console.log(circleArea(5)); // 78.53981633974483
console.log(sphereVolume(3)); // 113.09733552923254性能优化技巧
javascript
// 缓存常用的数学计算结果
const DEG_TO_RAD = Math.PI / 180;
const RAD_TO_DEG = 180 / Math.PI;
function fastDegreesToRadians(degrees) {
return degrees * DEG_TO_RAD;
}
function fastRadiansToDegrees(radians) {
return radians * RAD_TO_DEG;
}
// 预计算查找表
const SIN_TABLE = new Array(360);
for (let i = 0; i < 360; i++) {
SIN_TABLE[i] = Math.sin(i * Math.PI / 180);
}
function fastSin(degrees) {
return SIN_TABLE[Math.floor(degrees) % 360];
}Math 对象提供了丰富的数学功能,是进行科学计算、图形处理、游戏开发等领域的基础工具。掌握这些数学函数的使用方法,可以帮助我们解决各种实际问题。