---
title: Math
slug: Web/JavaScript/Reference/Global_Objects/Math
tags:
  - JavaScript
  - Math
  - 参考
  - 数学
  - 计算
translation_of: Web/JavaScript/Reference/Global_Objects/Math
---
<div>{{JSRef}}</div>

<p><strong><code>Math</code></strong> 是一个内置对象,它拥有一些数学常数属性和数学函数方法。<code>Math</code> 不是一个函数对象。</p>

<p><code>Math</code> 用于 {{jsxref("Number")}} 类型。它不支持 {{jsxref("BigInt")}}。</p>

<h2 id="描述">描述</h2>

<p>与其他全局对象不同的是,<code>Math</code> 不是一个构造器。<code>Math</code> 的所有属性与方法都是静态的。引用圆周率的写法是 <code>Math.PI</code>,调用正余弦函数的写法是 <code>Math.sin(x)</code>,<code>x</code> 是要传入的参数。<code>Math</code> 的常量是使用 JavaScript 中的全精度浮点数来定义的。</p>

<h2 id="属性">属性</h2>

<dl>
 <dt>{{jsxref("Math.E")}}</dt>
 <dd>欧拉常数,也是自然对数的底数,约等于 <code>2.718</code>。</dd>
 <dt>{{jsxref("Math.LN2")}}</dt>
 <dd><code>2</code> 的自然对数,约等于 <code>0.693</code>。</dd>
 <dt>{{jsxref("Math.LN10")}}</dt>
 <dd><code>10</code> 的自然对数,约等于 <code>2.303</code>。</dd>
 <dt>{{jsxref("Math.LOG2E")}}</dt>
 <dd>以 <code>2</code> 为底的 <code>E</code> 的对数,约等于 <code>1.443</code>。</dd>
 <dt>{{jsxref("Math.LOG10E")}}</dt>
 <dd>以 <code>10</code> 为底的 <code>E</code> 的对数,约等于 <code>0.434</code>。</dd>
 <dt>{{jsxref("Math.PI")}}</dt>
 <dd>圆周率,一个圆的周长和直径之比,约等于 <code>3.14159</code>。</dd>
 <dt>{{jsxref("Math.SQRT1_2")}}</dt>
 <dd>二分之一 ½ 的平方根,同时也是 <code>2</code> 的平方根的倒数 <math><mfrac><mn>1</mn><mrow><msqrt><mn>2</mn><mrow></mrow></msqrt></mrow></mfrac></math>,约等于 <code>0.707</code>。</dd>
 <dt>{{jsxref("Math.SQRT2")}}</dt>
 <dd><code>2</code> 的平方根,约等于 <code>1.414</code>。</dd>
</dl>

<h2 id="方法">方法</h2>

<div class="note">
<p>需要注意的是,三角函数 <code>sin()</code>、<code>cos()</code>、<code>tan()</code>、<code>asin()</code>、<code>acos()</code>、<code>atan()</code> 和 <code>atan2()</code> 返回的值是<em>弧度</em>而非角度。</p>

<p>若要转换,弧度除以 <code>(Math.PI / 180)</code> 即可转换为角度,同理,角度乘以这个数则能转换为弧度。</p>
</div>

<div class="note">
<p>需要注意的是,很多 <code>Math</code> 函数都有一个精度,而且这个精度在不同实现中也是不相同的。这意味着不同的浏览器会给出不同的结果,甚至,在不同的系统或架构下,相同的 JS 引擎也会给出不同的结果!</p>
</div>

<dl>
 <dt>{{jsxref("Global_Objects/Math/abs", "Math.abs(<var>x</var>)")}}</dt>
 <dd>返回一个数的绝对值。</dd>
 <dt>{{jsxref("Global_Objects/Math/acos", "Math.acos(<var>x</var>)")}}</dt>
 <dd>返回一个数的反余弦值。</dd>
 <dt>{{jsxref("Global_Objects/Math/acosh", "Math.acosh(<var>x</var>)")}}</dt>
 <dd>返回一个数的反双曲余弦值。</dd>
 <dt>{{jsxref("Global_Objects/Math/asin", "Math.asin(<var>x</var>)")}}</dt>
 <dd>返回一个数的反正弦值。</dd>
 <dt>{{jsxref("Global_Objects/Math/asinh", "Math.asinh(<var>x</var>)")}}</dt>
 <dd>返回一个数的反双曲正弦值。</dd>
 <dt>{{jsxref("Global_Objects/Math/atan", "Math.atan(<var>x</var>)")}}</dt>
 <dd>返回一个数的反正切值。</dd>
 <dt>{{jsxref("Global_Objects/Math/atanh", "Math.atanh(<var>x</var>)")}}</dt>
 <dd>返回一个数的反双曲正切值。</dd>
 <dt>{{jsxref("Global_Objects/Math/atan2", "Math.atan2(<var>y</var>, <var>x</var>)")}}</dt>
 <dd>返回 <code>y/x</code> 的反正切值。</dd>
 <dt>{{jsxref("Global_Objects/Math/cbrt", "Math.cbrt(<var>x</var>)")}}</dt>
 <dd>返回一个数的立方根。</dd>
 <dt>{{jsxref("Global_Objects/Math/ceil", "Math.ceil(<var>x</var>)")}}</dt>
 <dd>返回大于一个数的最小整数,即一个数向上取整后的值。</dd>
 <dt>{{jsxref("Global_Objects/Math/clz32", "Math.clz32(<var>x</var>)")}}</dt>
 <dd>返回一个 32 位整数的前导零的数量。</dd>
 <dt>{{jsxref("Global_Objects/Math/cos", "Math.cos(<var>x</var>)")}}</dt>
 <dd>返回一个数的余弦值。</dd>
 <dt>{{jsxref("Global_Objects/Math/cosh", "Math.cosh(<var>x</var>)")}}</dt>
 <dd>返回一个数的双曲余弦值。</dd>
 <dt>{{jsxref("Global_Objects/Math/exp", "Math.exp(<var>x</var>)")}}</dt>
 <dd>返回欧拉常数的参数次方,<code>E<var><sup>x</sup></var></code>,其中 <code><var>x</var></code> 为参数,<code>E</code> 是欧拉常数(2.718...,自然对数的底数)。</dd>
 <dt>{{jsxref("Global_Objects/Math/expm1", "Math.expm1(<var>x</var>)")}}</dt>
 <dd>返回 <code>exp(x) - 1</code> 的值。</dd>
 <dt>{{jsxref("Global_Objects/Math/floor", "Math.floor(<var>x</var>)")}}</dt>
 <dd>返回小于一个数的最大整数,即一个数向下取整后的值。</dd>
 <dt>{{jsxref("Global_Objects/Math/fround", "Math.fround(<var>x</var>)")}}</dt>
 <dd>返回最接近一个数的<a href="https://zh.wikipedia.org/wiki/%E5%96%AE%E7%B2%BE%E5%BA%A6%E6%B5%AE%E9%BB%9E%E6%95%B8">单精度浮点型</a>表示。</dd>
 <dt>{{jsxref("Global_Objects/Math/hypot", "Math.hypot([<var>x</var>[, <var>y</var>[, …]]])")}}</dt>
 <dd>返回其所有参数平方和的平方根。</dd>
 <dt>{{jsxref("Global_Objects/Math/imul", "Math.imul(<var>x</var>, <var>y</var>)")}}</dt>
 <dd>返回 32 位整数乘法的结果。</dd>
 <dt>{{jsxref("Global_Objects/Math/log", "Math.log(<var>x</var>)")}}</dt>
 <dd>返回一个数的自然对数(㏒<sub>e</sub>,即 ㏑)。</dd>
 <dt>{{jsxref("Global_Objects/Math/log1p", "Math.log1p(<var>x</var>)")}}</dt>
 <dd>返回一个数加 1 的和的自然对数(㏒<sub>e</sub>,即 ㏑)。</dd>
 <dt>{{jsxref("Global_Objects/Math/log10", "Math.log10(<var>x</var>)")}}</dt>
 <dd>返回一个数以 10 为底数的对数。</dd>
 <dt>{{jsxref("Global_Objects/Math/log2", "Math.log2(<var>x</var>)")}}</dt>
 <dd>返回一个数以 2 为底数的对数。</dd>
 <dt>{{jsxref("Global_Objects/Math/max", "Math.max([<var>x</var>[, <var>y</var>[, …]]])")}}</dt>
 <dd>返回零到多个数值中最大值。</dd>
 <dt>{{jsxref("Global_Objects/Math/min", "Math.min([<var>x</var>[, <var>y</var>[, …]]])")}}</dt>
 <dd>返回零到多个数值中最小值。</dd>
 <dt>{{jsxref("Global_Objects/Math/pow", "Math.pow(<var>x</var>, <var>y</var>)")}}</dt>
 <dd>返回一个数的 y 次幂。</dd>
 <dt>{{jsxref("Global_Objects/Math/random", "Math.random()")}}</dt>
 <dd>返回一个 0 到 1 之间的伪随机数。</dd>
 <dt>{{jsxref("Global_Objects/Math/round", "Math.round(<var>x</var>)")}}</dt>
 <dd>返回四舍五入后的整数。</dd>
 <dt>{{jsxref("Global_Objects/Math/sign", "Math.sign(<var>x</var>)")}}</dt>
 <dd>返回一个数的符号,得知一个数是正数、负数还是 0。</dd>
 <dt>{{jsxref("Global_Objects/Math/sin", "Math.sin(<var>x</var>)")}}</dt>
 <dd>返回一个数的正弦值。</dd>
 <dt>{{jsxref("Global_Objects/Math/sinh", "Math.sinh(<var>x</var>)")}}</dt>
 <dd>返回一个数的双曲正弦值。</dd>
 <dt>{{jsxref("Global_Objects/Math/sqrt", "Math.sqrt(<var>x</var>)")}}</dt>
 <dd>返回一个数的平方根。</dd>
 <dt>{{jsxref("Global_Objects/Math/tan", "Math.tan(<var>x</var>)")}}</dt>
 <dd>返回一个数的正切值。</dd>
 <dt>{{jsxref("Global_Objects/Math/tanh", "Math.tanh(<var>x</var>)")}}</dt>
 <dd>返回一个数的双曲正切值。</dd>
 <dt><code>Math.toSource()</code></dt>
 <dd>返回字符串 <code>"Math"</code>。</dd>
 <dt>{{jsxref("Global_Objects/Math/trunc", "Math.trunc(<var>x</var>)")}}</dt>
 <dd>返回一个数的整数部分,直接去除其小数点及之后的部分。</dd>
</dl>

<div class="hidden">
<div class="note">
<p>已被移除的内容:</p>
</div>

<h2 id="拓展_Math_对象">拓展 <code>Math</code> 对象</h2>

<p>As with most of the built-in objects in JavaScript, the <code>Math</code> object can be extended with custom properties and methods. To extend the <code>Math</code> object, you do not use <code>prototype</code>. Instead, you directly extend <code>Math</code>:</p>

<pre>Math.propName = propValue;
Math.methodName = methodRef;</pre>

<p>For instance, the following example adds a method to the <code>Math</code> object for calculating the <em>greatest common divisor</em> of a list of arguments.</p>

<pre class="brush: js">/* Variadic function -- Returns the greatest common divisor of a list of arguments */
Math.gcd = function() {
    if (arguments.length == 2) {
        if (arguments[1] == 0)
            return arguments[0];
        else
            return Math.gcd(arguments[1], arguments[0] % arguments[1]);
    } else if (arguments.length &gt; 2) {
        var result = Math.gcd(arguments[0], arguments[1]);
        for (var i = 2; i &lt; arguments.length; i++)
            result = Math.gcd(result, arguments[i]);
        return result;
    }
};</pre>

<p>试试运行下面的代码:</p>

<pre class="brush: js">console.log(Math.gcd(20, 30, 15, 70, 40)); // `5`</pre>
</div>

<h2 id="规范">规范</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">规范</th>
  </tr>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-math-object', 'Math')}}</td>
  </tr>
 </tbody>
</table>

<h2 id="浏览器兼容性">浏览器兼容性</h2>

<p>{{Compat("javascript.builtins.Math")}}</p>

<h2 id="参见">参见</h2>

<ul>
 <li>{{jsxref("Number")}}</li>
</ul>