Math 对象

  • Math 是 JavaScript 内置对象,提供数学运算,全部为静态方法 / 常量
  • 方法名首字母大写,用 Math. 前缀调用,如 Math.abs(-3)

常量

  • Math.PI
    • 圆周率,约 3.14159
  • Math.E
    • 自然对数底,约 2.71828
  • Math.SQRT2
    • 2 的平方根,约 1.41421
  • Math.SQRT1_2
    • 1/2 的平方根,约 0.70711
  • Math.LN2
    • 2 的自然对数,约 0.69315
  • Math.LN10
    • 10 的自然对数,约 2.30259
  • Math.LOG2E
    • 以 2 为底 e 的对数,约 1.44270
  • Math.LOG10E
    • 以 10 为底 e 的对数,约 0.43429
  • 说明:无穷大用全局 Infinity,非数字用全局 NaN,不属于 Math 常量

基本运算

  • Math.abs(x)
    • 绝对值
  • Math.sqrt(x)
    • 平方根,x 须为非负数
  • Math.cbrt(x)
    • 立方根
  • Math.pow(x, y)
    • 幂运算,x 的 y 次方
  • Math.hypot(a, b, ...)
    • 各参数平方求和的平方根,常用于求向量长度
  • Math.sign(x)
    • 符号判断,正数 1、负数 -1、0 返回 0
  • Math.max(a, b, ...)
    • 返回最大值,可传多个参数
  • Math.min(a, b, ...)
    • 返回最小值
  • Math.random()
    • 返回[0, 1)的随机小数,配合 Math.floor 取随机整数
      • 示例: Math.floor(Math.random() * 10) // 0-9 随机整数
  • 说明:JS 没有阶乘 factorial、最大公约数 gcd、最小公倍数 lcm、modf 分解小数,需自行实现(gcd 可用辗转相除)

指数与对数

  • Math.exp(x)
    • 指数函数 e^x
  • Math.expm1(x)
    • e^x - 1,x 接近 0 时比 exp(x)-1 更精确
  • Math.log(x)
    • 自然对数 ln(x),只有这一个底数参数,不支持指定 base
  • Math.log2(x)
    • 以 2 为底的对数
  • Math.log10(x)
    • 以 10 为底的对数
  • Math.log1p(x)
    • ln(1 + x),x 接近 0 时更精确
  • 说明:JS 没有类似改底数的 log(x, base),换底需自算,如 Math.log(x) / Math.log(2)

三角函数(弧度制)

  • Math.sin(x)
    • 正弦
  • Math.cos(x)
    • 余弦
  • Math.tan(x)
    • 正切
  • Math.asin(x)
    • 反正弦,x 范围 [-1, 1]
  • Math.acos(x)
    • 反余弦,x 范围 [-1, 1]
  • Math.atan(x)
    • 反正切,返回 [-π/2, π/2]
  • Math.atan2(y, x)
    • 象限反正切,根据 x、y 符号返回 [-π, π] 正确象限角
  • 双曲函数: sinh(x) / cosh(x) / tanh(x) / asinh(x) / acosh(x) / atanh(x)
    • 双曲正弦 / 双曲余弦 / 双曲正切及其反函数
  • 说明:JS 没有 degrees / radians 转换,角度转弧度自行乘以 Math.PI / 180

取整

  • Math.round(x)
    • 四舍五入取整
  • Math.ceil(x)
    • 向上取整,返回不小于 x 的整数
  • Math.floor(x)
    • 向下取整,返回不大于 x 的整数
  • Math.trunc(x)
    • 向零取整,直接去掉小数部分
  • 区别示例:
    • Math.round(2.5) // 3,Math.floor(2.5) // 2
    • Math.trunc(-2.5) // -2,Math.floor(-2.5) // -3,负数的 ceil/floor/trunc 结果不同

数值判断(非 Math,是全局函数 / Number 静态方法)

  • 说明:Math 本身没有 isfinite / isinf,JS 对应的是 Number 静态方法或全局函数
  • Number.isFinite(x)
    • 判断是否为有限数
  • Number.isNaN(x)
    • 判断是否为 NaN
  • Number.isInteger(x)
    • 判断是否为整数
  • Number.isSafeInteger(x)
    • 判断是否为安全整数(±2^53-1 内)
  • 全局 isFinite(x) / isNaN(x)
    • 宽松版判断,会先转数字再判断,如 isNaN("abc") 返回 true