1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
|
---
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 > 2) {
var result = Math.gcd(arguments[0], arguments[1]);
for (var i = 2; i < 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 class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
<p>{{Compat("javascript.builtins.Math")}}</p>
<h2 id="参见">参见</h2>
<ul>
<li>{{jsxref("Number")}}</li>
</ul>
|