文章目录

  • 一、Math 对象属性
  • 二、Math 对象方法
  • 三、获取指定范围内的随机整数
  • 四、其他方法
  • 五、基本引用类型小结


  • ECMAScript 提供了 Math 对象作为保存数学公式、信息和计算的地方
  • Math 对象提供了一些辅助计算的属性和方法

注意:Math 对象上提供的计算要比直接在 JavaScript 实现的快得多,因为 Math 对象上的计算使用了 JavaScript 引擎中更高效的实现和处理器指令。但使用 Math 计算的问题是精度会因浏览器、操作系统、指令集和硬件而异。

一、Math 对象属性

Math 对象有一些属性,主要用于保存数学中的一些特殊值

属 性

说 明

Math.E

自然对数的基数 e 的值

Math.LN10

10 为底的自然对数

Math.LN2

2 为底的自然对数

Math.LOG2E

以 2 为底 e 的对数

Math.LOG10E

以 10 为底 e 的对数

Math.PI

π 的值

Math.SQRT1_2

1/2 的平方根

Math.SQRT2

2 的平方根

二、Math 对象方法

Math 对象不是构造函数,它具有数学常数和函数的属性和方法。跟数学相关的运算(求绝对值,取整、最大值等)可以使用 Math 中的成员

方法名

说明

Math.floor()

向下取整(取小)

Math.ceil()

向上取整(取大)

Math.round()

四舍五入版 就近取整 注意 -3.5 结果是 -3

Math.fround()

返回数值最接近的单精度(32 位)浮点值表示

Math.abs()

绝对值

Math.max() / Math.min()

求最大和最小值

Math.random()

获取范围在[0,1)内的随机值(始终返回小数)

Math.max() / Math.min()

let max = Math.max(1, 2, 3, 4);
console.log(max); // 4

let min = Math.min(1, 2, 3, 4); 
console.log(min); // 1

//数组中的最大值和最小值
let values = [1, 2, 3, 4, 5, 6, 7, 8]; 
let max = Math.max(...val);

舍入方法

console.log(Math.ceil(25.9)); // 26 
console.log(Math.ceil(25.5)); // 26 
console.log(Math.ceil(25.1)); // 26 

console.log(Math.round(25.9)); // 26 
console.log(Math.round(25.5)); // 26 
console.log(Math.round(25.1)); // 25 
console.log(Math.round(-25.5)); // -25 

console.log(Math.fround(0.4)); // 0.4000000059604645 
console.log(Math.fround(0.5)); // 0.5 
console.log(Math.fround(25.9)); // 25.899999618530273 

console.log(Math.floor(25.9)); // 25 
console.log(Math.floor(25.5)); // 25 
console.log(Math.floor(25.1)); // 25

random()

console.log(Math.random()); // 随机数:0.8485739886796229

三、获取指定范围内的随机整数

function getRandom(min, max) {
  return Math.floor(
  	Math.random() * (max - min + 1)
  ) + min; 
}

注意:Math.random() 方法在这里出于演示目的是没有问题的。如果是为了加密而需要生成随机数(传给生成器的输入需要较高的不确定性),那么建议使用 window.crypto. getRandomValues() ,后续会在JavaScript api 中介绍

四、其他方法

Math 对象还有很多涉及各种简单或高阶数运算的方法

方 法

说 明

Math.exp(x)

返回 Math.E 的 x 次幂

Math.expm1(x)

等于 Math.exp(x) - 1

Math.log(x)

返回 x 的自然对数

Math.log1p(x)

等于 1 + Math.log(x)

Math.pow(x, power)

返回 x 的 power 次幂

Math.hypot(…nums)

返回 nums 中每个数平方和的平方根

Math.clz32(x)

返回 32 位整数 x 的前置零的数量

Math.sign(x)

返回表示 x 符号的 1、0、-0 或-1

Math.trunc(x)

返回 x 的整数部分,删除所有小数

Math.sqrt(x)

返回 x 的平方根

Math.cbrt(x)

返回 x 的立方根

Math.acos(x)

返回 x 的反余弦

Math.acosh(x)

返回 x 的反双曲余弦

Math.asin(x)

返回 x 的反正弦

Math.asinh(x)

返回 x 的反双曲正弦

Math.atan(x)

返回 x 的反正切

Math.atanh(x)

返回 x 的反双曲正切

Math.atan2(y, x)

返回 y/x 的反正切

Math.cos(x)

返回 x 的余弦

Math.sin(x)

返回 x 的正弦

Math.tan(x)

返回 x 的正切

即便这些方法都是由 ECMA-262 定义的,对正弦、余弦、正切等计算的实现仍然取决于浏览器,因为计算这些值的方式有很多种。结果,这些方法的精度可能因实现而异。

五、基本引用类型小结

JavaScript 中的对象称为引用值,几种内置的引用类型可用于创建特定类型的对象

  • 引用值与传统面向对象编程语言中的类相似,但实现不同
  • Date 类型提供关于日期和时间的信息,包括当前日期、时间及相关计算
  • RegExp 类型是 ECMAScript 支持正则表达式的接口,提供了大多数基础的和部分高级的正则表达式功能

JavaScript 比较独特的一点是,函数实际上是 Function类型的实例,也就是说函数也是对象。因为函数也是对象,所以函数也有方法,可以用于增强其能力

由于原始值包装类型的存在,JavaScript 中的原始值可以被当成对象来使用。有 3 种原始值包装类型:Boolean、Number 和 String。它们都具备如下特点:

  • 每种包装类型都映射到同名的原始类型
  • 以读模式访问原始值时,后台会实例化一个原始值包装类型的对象,借助这个对象可以操作相应的数据
  • 涉及原始值的语句执行完毕后,包装对象就会被销毁

当代码开始执行时,全局上下文中会存在两个内置对象:Global 和 Math。其中,Global 对象在大多数 ECMAScript 实现中无法直接访问。不过,浏览器将其实现为 window 对象。所有全局变量和函数都是 Global 对象的属性。Math 对象包含辅助完成复杂计算的属性和方法。