Math
is a built-in object that has properties and methods for mathematical constants and functions. Not a function object.
Unlike the other global objects, Math
is not a constructor. All properties and methods of Math
are static. You refer to the constant pi as Math.PI
and you call the sine function as Math.sin(x)
, where x
is the method's argument. Constants are defined with the full precision of real numbers in JavaScript.
Math.E
Math.LN2
Math.LN10
Math.LOG2E
Math.LOG10E
Math.PI
Math.SQRT1_2
Math.SQRT2
Note that the trigonometric functions (sin()
, cos()
, tan()
, asin()
, acos()
, atan()
, atan2()
) expect or return angles in radians. To convert radians to degrees, divide by (Math.PI / 180)
, and multiply by this to convert the other way.
Note that many math functions have a precision that's implementation-dependent. This means that different browsers can give a different result, and even the same JS engine on a different OS or architecture can give different results.
Math.abs(x)
Math.acos(x)
Math.acosh(x)
Math.asin(x)
Math.asinh(x)
Math.atan(x)
Math.atanh(x)
Math.atan2(y, x)
Math.cbrt(x)
Math.ceil(x)
Math.clz32(x)
Math.cos(x)
Math.cosh(x)
Math.exp(x)
Math.expm1(x)
exp(x)
.Math.floor(x)
Math.fround(x)
Math.hypot([x[, y[, …]]])
Math.imul(x, y)
Math.log(x)
Math.log1p(x)
1 + x
for a number x.Math.log10(x)
Math.log2(x)
Math.max([x[, y[, …]]])
Math.min([x[, y[, …]]])
Math.pow(x, y)
base^{exponent}
.Math.random()
Math.round(x)
Math.sign(x)
Math.sin(x)
Math.sinh(x)
Math.sqrt(x)
Math.tan(x)
Math.tanh(x)
Math.toSource()
"Math"
.Math.trunc(x)
Math
objectAs most of the built-in objects in JavaScript, the Math
object can be extended with custom properties and methods. To extend the Math
object, you do not use 'prototype'. Instead, you directly extend Math
:
Math.propName = propValue; Math.methodName = methodRef;
For instance, the following example adds a method to the Math
object for calculating the greatest common divisor of a list of arguments.
/* 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; } };
Try it:
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. | Draft |
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 | 8 |
asin |
Yes | Yes | Yes | Yes | Yes | Yes |
asinh |
38 | Yes | 25 | No | 25 | 8 |
atan |
Yes | Yes | Yes | Yes | Yes | Yes |
atan2 |
Yes | Yes | Yes | Yes | Yes | Yes |
atanh |
38 | Yes | 25 | No | 25 | 8 |
cbrt |
38 | Yes | 25 | No | 25 | 8 |
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 | 8 |
exp |
Yes | Yes | Yes | Yes | Yes | Yes |
expm1 |
38 | Yes | 25 | No | 25 | 8 |
floor |
Yes | Yes | Yes | Yes | Yes | Yes |
fround |
38 | Yes | 26 | No | 25 | 8 |
hypot |
38 | Yes | 27 | No | 25 | 8 |
imul |
28 | Yes | 20 | No | 16 | 7 |
log |
Yes | Yes | Yes | Yes | Yes | Yes |
log1p |
38 | Yes | 25 | No | 25 | 8 |
log2 |
38 | Yes | 25 | No | 25 | 8 |
log10 |
38 | Yes | 25 | No | 25 | 8 |
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 | 8 |
sqrt |
Yes | Yes | Yes | Yes | Yes | Yes |
tan |
Yes | Yes | Yes | Yes | Yes | Yes |
tanh |
38 | Yes | 25 | No | 25 | 8 |
trunc |
38 | Yes | 25 | No | 25 | 8 |
Feature | Android webview | Chrome for Android | Edge mobile | Firefox for Android | Opera Android | iOS Safari | Samsung Internet |
---|---|---|---|---|---|---|---|
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 |
Yes | Yes | Yes | 25 | Yes | 8 | ? |
asin |
Yes | Yes | Yes | Yes | Yes | Yes | ? |
asinh |
Yes | Yes | Yes | 25 | Yes | 8 | ? |
atan |
Yes | Yes | Yes | Yes | Yes | Yes | ? |
atan2 |
Yes | Yes | Yes | Yes | Yes | Yes | ? |
atanh |
Yes | Yes | Yes | 25 | Yes | 8 | ? |
cbrt |
Yes | Yes | Yes | 25 | Yes | 8 | ? |
ceil |
Yes | Yes | Yes | Yes | Yes | Yes | ? |
clz32 |
Yes | Yes | Yes | 31 | Yes | Yes | ? |
cos |
Yes | Yes | Yes | Yes | Yes | Yes | ? |
cosh |
Yes | Yes | Yes | 25 | Yes | 8 | ? |
exp |
Yes | Yes | Yes | Yes | Yes | Yes | ? |
expm1 |
Yes | Yes | Yes | 25 | Yes | 8 | ? |
floor |
Yes | Yes | Yes | Yes | Yes | Yes | ? |
fround |
Yes | Yes | Yes | 26 | Yes | 8 | ? |
hypot |
Yes | Yes | Yes | 27 | Yes | 8 | ? |
imul |
Yes | Yes | Yes | 20 | Yes | 7 | ? |
log |
Yes | Yes | Yes | Yes | Yes | Yes | ? |
log1p |
Yes | Yes | Yes | 25 | Yes | 8 | ? |
log2 |
Yes | Yes | Yes | 25 | Yes | 8 | ? |
log10 |
Yes | Yes | Yes | 25 | Yes | 8 | ? |
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 |
Yes | Yes | Yes | 25 | Yes | Yes | ? |
sin |
Yes | Yes | Yes | Yes | Yes | Yes | ? |
sinh |
Yes | Yes | Yes | 25 | Yes | 8 | ? |
sqrt |
Yes | Yes | Yes | Yes | Yes | Yes | ? |
tan |
Yes | Yes | Yes | Yes | Yes | Yes | ? |
tanh |
Yes | Yes | Yes | 25 | Yes | 8 | ? |
trunc |
Yes | Yes | Yes | 25 | Yes | 8 | ? |
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math