JavaScript数学对象是什么_它提供哪些数学功能

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.LN2Math.LN10:ln(2) 和 ln(10)
  • Math.LOG2EMath.LOG10E:以 2 和 10 为底的 e 的对数
  • Math.SQRT2Math.SQRT1_2:√2 和 √½

注意:Math 没有 Math.phiMath.goldenRatio —— 需要手动定义。

Math 常用计算方法怎么用?

所有方法都是纯函数,不修改原值,只返回新值。输入非数字时多数会先转为数值(NaN 除外):

  • 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

三角函数和对数要注意什么?

所有三角函数(sincostan 等)参数单位是**弧度**,不是角度:

  • 角度转弧度:乘以 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),但文档极少提及,调试时建议实测验证边界输入。