Math提供常用数学常量如PI、E、LN2、LN10、LOG2E、LOG10E、SQRT2、SQRT1_2,均为只读属性;常用方法包括round、floor、ceil、trunc、pow、sqrt、random等,均不修改原值;三角函数参数为弧度,对数函数log为自然对数,log10和log2为ES6+新增;Math不支持数组运算、复数、大整数、统计分布或符号计算,且浮点误差需容差判断。

JavaScript 的 Math 对象不是构造函数,不能用 new Math() 创建实例;它是一组静态属性和方法的集合,所有成员都直接挂载在 Math 上,调用时无需实例化。
Math 提供哪些常用数学常量?
这些是只读属性,代表基础数学常量,精度与 IEEE 754 双精度一致:
-
Math.PI:圆周率 π(≈ 3.141592653589793) -
Math.E:自然对数的底 e(≈ 2.718281828459045) -
Math.LN2、Math.LN10:ln(2) 和 ln(10) -
Math.LOG2E、Math.LOG10E:以 2 和 10 为底的 e 的对数 -
Math.SQRT2、Math.SQRT1_2:√2 和 √½
注意:Math 没有 Math.phi 或 Math.goldenRatio —— 需要手动定义。
Math 常用计算方法怎么用?
所有方法都是纯函数,不修改原值,只返回新值。输入非数字时多数会先转为数值(NaN 除外):
立即学习“Java免费学习笔记(深入)”;
-
Math.round(x):四舍五入到最近整数(.5向正无穷舍入) -
Math.floor(x)、Math.ceil(x)、Math.trunc(x):向下取整、向上取整、截断小数部分 -
Math.pow(x, y)等价于x ** y,但支持NaN和边界值更明确 -
Math.sqrt(x)要求x >= 0,否则返回NaN;负数开方请用Math.sqrt(Math.abs(x))+ 符号判断 -
Math.random()返回 [0, 1) 区间浮点数,生成整数范围常用:Math.floor(Math.random() * (max - min + 1)) + min
三角函数和对数要注意什么?
所有三角函数(sin、cos、tan 等)参数单位是**弧度**,不是角度:
- 角度转弧度:乘以
Math.PI / 180 - 弧度转角度:乘以
180 / Math.PI -
Math.log(x)是自然对数(ln),不是常用对数(log₁₀);需要 log₁₀ 用Math.log10(x)(ES6+) -
Math.log2(x)是以 2 为底的对数(ES6+),旧环境可用Math.log(x) / Math.log(2) - 所有对数方法对 ≤ 0 输入均返回
NaN
Math 不支持哪些常见需求?
它不处理数组运算、复数、大整数、统计分布或符号计算:
- 没有
Math.sum()、Math.avg()—— 数组聚合需配合reduce - 没有阶乘、排列组合、质数判断等数论函数 —— 需自行实现或引入库
-
Math.max()和Math.min()不接受数组,必须展开:Math.max(...arr)
或Math.max.apply(null, arr)(旧环境) - 浮点误差依然存在:
Math.sin(Math.PI)不严格等于 0(返回 ≈ 1.22e-16),比较时需用容差判断
真正容易被忽略的是:几乎所有 Math 方法对 Infinity 和 -Infinity 有明确定义行为(如 Math.atan2(Infinity, Infinity) === Math.PI / 4),但文档极少提及,调试时建议实测验证边界输入。










