Math对象

正如我们所看到的那样,Math对象中包含了许多与数字相关的工具函数,比如Math.max(求最大值)、Math.min(求最小值)和Math.sqrt(求平方根)。

Math对象被用作一个容器来分组一堆相关的功能。 只有一个Math对象,它作为一个值几乎没有用处。 相反,它提供了一个命名空间,使所有这些函数和值不必是全局绑定。

过多的全局绑定会“污染”命名空间。全局绑定越多,就越有可能一不小心把某些绑定的值覆盖掉。比如,我们可能想在程序中使用名为max的绑定,由于 JavaScript 将内置的max函数安全地放置在Math对象中,因此不必担心max的值会被覆盖。

当你去定义一个已经被使用的绑定名的时候,对于很多编程语言来说,都会阻止你这么做,至少会对这种行为发出警告。但是 JavaScript 不会,因此要小心这些陷阱。

让我们来继续了解Math对象。如果需要做三角运算,Math对象可以帮助到你,它包含cos(余弦)、sin(正弦)、tan(正切)和各自的反函数(acosasinatan)。Math.PI则表示数字π,或至少是 JavaScript 中的数字近似值。在传统的程序设计当中,常量均以大写来标注。

  1. function randomPointOnCircle(radius) {
  2. let angle = Math.random() * 2 * Math.PI;
  3. return {x: radius * Math.cos(angle),
  4. y: radius * Math.sin(angle)};
  5. }
  6. console.log(randomPointOnCircle(2));
  7. // → {x: 0.3667, y: 1.966}

如果你对正弦或余弦不大熟悉,不必担心。我们会在第 13 章用到它们时,再做进一步解释。

在上面的示例代码中使用了Math.random。每次调用该函数时,会返回一个伪随机数,范围在 0(包括)到 1(不包括)之间。

  1. console.log(Math.random());
  2. // → 0.36993729369714856
  3. console.log(Math.random());
  4. // → 0.727367032552138
  5. console.log(Math.random());
  6. // → 0.40180766698904335

虽然计算机是确定性的机器,但如果给定相同的输入,它们总是以相同的方式作出反应 - 让它们产生随机显示的数字是可能的。 为此,机器会维护一些隐藏的值,并且每当你请求一个新的随机数时,它都会对该隐藏值执行复杂的计算来创建一个新值。 它存储一个新值并返回从中派生的一些数字。 这样,它可以以随机的方式产生新的,难以预测的数字。

如果我们想获取一个随机的整数而非小数,可以使用Math.floor(向下取整到与当前数字最接近的整数)来处理Math.random的结果。

  1. console.log(Math.floor(Math.random() * 10));
  2. // → 2

将随机数乘以 10 可以得到一个在 0 到 10 之间的数字。由于Math.floor是向下取整,因此该函数会等概率地取到 0 到 9 中的任何一个数字。

还有两个函数,分别是Math.ceil(向上取整)和Math.round(四舍五入)。以及Math.abs,它取数字的绝对值,这意味着它反转了负值,但保留了正值。