JavaScript参考手册
Math
Math
Math
是一个内置对象, 它具有数学常数和函数的属性和方法。不是一个函数对象。
描述
与其它全局对象不同的是, Math
不是一个构造器. Math
的所有属性和方法都是静态的. 你用到的常数pi可以用 Math.PI
表示,用 x
作参数 Math.sin(x)调用sin函数. JavaScript中的常数, 是以全精度的实数定义的.
属性
Math.E
欧拉常数,也是自然对数的底数, 约等于 2.718.Math.LN2
2的自然对数, 约等于0.693.Math.LN10
10的自然对数, 约等于 2.303.Math.LOG2E
以2为底E的对数, 约等于 1.443.Math.LOG10E
以10为底E的对数, 约等于 0.434.Math.PI
圆周率,一个圆的周长和直径之比,约等于 3.14159.Math.SQRT1_2
1/2的平方根, 约等于 0.707.Math.SQRT2
2的平方根,约等于 1.414.
方法
需要注意的是三角函数(sin()
, cos()
, tan()
,asin()
, acos()
, atan()
, atan2())是以弧度返回值的。可以通过除法(
Math.PI / 180)把弧度转换为角度,也可以通过其他方法来转换。
需要注意的是很多数学函数都有一个精度,并且精度在不同环境下也是不相同的。这就意味着不同的浏览器会给出不同的结果,甚至相同的 JS 引擎在不同的OS或者架构下也会给出不同的结果。
Math.abs(x)
返回x的绝对值.
Math.acos(x)
返回x的反余弦值.
Math.acosh(x)
返回x的反双曲余弦值.
Math.asin(x)
返回x的反正弦值.
Math.asinh(x)
返回x的反双曲正弦值.
Math.atan(x)
以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值.
Math.atanh(x)
返回 x 的反双曲正切值.
Math.atan2(y, x)
返回 y/x 的反正切值.
Math.cbrt(x)
返回x的立方根.
Math.ceil(x)
返回x向上取整后的值.
Math.clz32(x)
返回一个32位整数的前导零的数量。
Math.cos(x)
返回x的余弦值.
Math.cosh(x)
返回x的双曲余弦值.
Math.exp(x)
返回 Ex, 当x为参数, E 是欧拉常数 (2.718...), 自然对数的底.
Math.expm1(x)
返回 exp(x)-1 的值.
Math.floor(x)
返回小于x的最大整数。
Math.fround(x)
返回数字的最接近的单精度浮点型表示。
Math.hypot([x[,y[,…]]])
返回其参数平方和的平方根。
Math.imul(x)
返回32位整数乘法的结果。
Math.log(x)
返回一个数的自然对数(loge,即ln)。
Math.log1p(x)
返回 1 加上一个数字的的自然对数(loge,即ln)。
Math.log10(x)
返回以10为底数的x的对数。
Math.log2(x)
返回以2为底数的x的对数。
Math.max([x[,y[,…]]])
返回0个到多个数值中最大值.
Math.min([x[,y[,…]]])
返回0个到多个数值中最小值.
Math.pow(x,y)
返回x的y次幂.
Math.random()
返回0到1之间的伪随机数.
Math.round(x)
返回四舍五入后的整数.
Math.sign(x)
返回x的符号函数, 判定x是正数,负数还是0.
Math.sin(x)
返回正弦值.
Math.sinh(x)
返回x的双曲正弦值.
Math.sqrt(x)
返回x的平方根.
Math.tan(x)
返回x的正切值.
Math.tanh(x)
返回x的双曲正切值.Math.toSource()
返回字符串 "Math"
.
Math.trunc(x)
返回x的整数部分,去除小数.
扩展Math
对象
由于JavaScript中的大多数内置Math
对象都可以使用自定义属性和方法进行扩展。为了扩展Math
对象,你不要使用“原型”而是直接扩展Math
:
Math.propName = propValue;
Math.methodName = methodRef;
例如,下面的示例向Math
对象添加一个方法来计算参数列表的最大公约数。
/* Variadic function -- Returns the greatest common divisor of a list of arguments */
Math.gcd = function () {
var d = Math.min.apply(Math, arguments);
for (let n = arguments.length, i = 0; d > 1 && n > i; arguments[i] % d === 0 ? i++ : (d--, i = 0));
return d;
}
尝试一下:
console.log(Math.gcd(20, 30, 15, 70, 40)); // `5`
规范
Specification |
Status |
Comment |
---|---|---|
ECMAScript 1st Edition (ECMA-262) |
Standard |
Initial definition. Implemented in JavaScript 1.1. |
ECMAScript 5.1 (ECMA-262)The definition of 'Math' in that specification. |
Standard |
|
ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'Math' in that specification. |
Standard |
New methods log10(), log2(), log1p(), expm1(), cosh(), sinh(), tanh(), acosh(), asinh(), atanh(), hypot(), trunc(), sign(), imul(), fround(), cbrt() and clz32() added. |
ECMAScript Latest Draft (ECMA-262)The definition of 'Math' in that specification. |
Living Standard |
|
浏览器兼容性
Feature |
Chrome |
Edge |
Firefox |
Internet Explorer |
Opera |
Safari |
---|---|---|---|---|---|---|
E |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
LN2 |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
LN10 |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
LOG2E |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
LOG10E |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
PI |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
SQRT1_2 |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
SQRT2 |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
abs |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
acos |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
acosh |
38 |
(Yes) |
25 |
No |
25 |
7.1 |
asin |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
asinh |
38 |
(Yes) |
25 |
No |
25 |
7.1 |
atan |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
atan2 |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
atanh |
38 |
(Yes) |
25 |
No |
25 |
7.1 |
cbrt |
38 |
(Yes) |
25 |
No |
25 |
7.1 |
ceil |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
clz32 |
38 |
(Yes) |
31 |
No |
25 |
(Yes) |
cos |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
cosh |
38 |
(Yes) |
25 |
No |
25 |
7.1 |
exp |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
expm1 |
38 |
(Yes) |
25 |
No |
25 |
7.1 |
floor |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
fround |
38 |
(Yes) |
26 |
No |
25 |
7.1 |
hypot |
38 |
(Yes) |
27 |
No |
25 |
7.1 |
imul |
28 |
(Yes) |
20 |
No |
16 |
7 |
log |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
log1p |
38 |
(Yes) |
25 |
No |
25 |
7.1 |
log2 |
38 |
(Yes) |
25 |
No |
25 |
7.1 |
log10 |
38 |
(Yes) |
25 |
No |
25 |
7.1 |
max |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
min |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
pow |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
random |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
round |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
sign |
38 |
(Yes) |
25 |
No |
25 |
9 |
sin |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
sinh |
38 |
(Yes) |
25 |
No |
25 |
7.1 |
sqrt |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
tan |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
tanh |
38 |
(Yes) |
25 |
No |
25 |
7.1 |
trunc |
38 |
(Yes) |
25 |
No |
25 |
7.1 |
Feature |
Android |
Chrome for Android |
Edge mobile |
Firefox for Android |
IE mobile |
Opera Android |
iOS Safari |
---|---|---|---|---|---|---|---|
E |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
LN2 |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
LN10 |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
LOG2E |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
LOG10E |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
PI |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
SQRT1_2 |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
SQRT2 |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
abs |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
acos |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
acosh |
(Yes) |
(Yes) |
(Yes) |
25 |
No |
(Yes) |
8 |
asin |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
asinh |
(Yes) |
(Yes) |
(Yes) |
25 |
No |
(Yes) |
8 |
atan |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
atan2 |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
atanh |
(Yes) |
(Yes) |
(Yes) |
25 |
No |
(Yes) |
8 |
cbrt |
(Yes) |
(Yes) |
(Yes) |
25 |
No |
(Yes) |
8 |
ceil |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
clz32 |
(Yes) |
(Yes) |
(Yes) |
31 |
No |
(Yes) |
(Yes) |
cos |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
cosh |
(Yes) |
(Yes) |
(Yes) |
25 |
No |
(Yes) |
8 |
exp |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
expm1 |
(Yes) |
(Yes) |
(Yes) |
25 |
No |
(Yes) |
8 |
floor |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
fround |
(Yes) |
(Yes) |
(Yes) |
26 |
No |
(Yes) |
8 |
hypot |
(Yes) |
(Yes) |
(Yes) |
27 |
No |
(Yes) |
8 |
imul |
(Yes) |
(Yes) |
(Yes) |
20 |
No |
(Yes) |
7 |
log |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
log1p |
(Yes) |
(Yes) |
(Yes) |
25 |
No |
(Yes) |
8 |
log2 |
(Yes) |
(Yes) |
(Yes) |
25 |
No |
(Yes) |
8 |
log10 |
(Yes) |
(Yes) |
(Yes) |
25 |
No |
(Yes) |
8 |
max |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
min |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
pow |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
random |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
round |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
sign |
(Yes) |
(Yes) |
(Yes) |
25 |
No |
(Yes) |
(Yes) |
sin |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
sinh |
(Yes) |
(Yes) |
(Yes) |
25 |
No |
(Yes) |
8 |
sqrt |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
tan |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
tanh |
(Yes) |
(Yes) |
(Yes) |
25 |
No |
(Yes) |
8 |
trunc |
(Yes) |
(Yes) |
(Yes) |
25 |
No |
(Yes) |
8 |
JavaScript 是一种高级编程语言,通过解释执行,是一门动态类型,面向对象(基于原型)的解释型语言。它已经由ECMA(欧洲电脑制造商协会)通过 ECMAScript 实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器( Chrome、IE、FireFox、Safari、Opera )支持。JavaScript 是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持 I/O,比如网络