非常教程

JavaScript参考手册

Math

Math

Math 是一个内置对象, 它具有数学常数和函数的属性和方法。不是一个函数对象。

描述

与其它全局对象不同的是, Math 不是一个构造器.  Math 的所有属性和方法都是静态的. 你用到的常数pi可以用 Math.PI 表示,用 x 作参数 Math.sin(x)调用sin函数. JavaScript中的常数, 是以全精度的实数定义的.

属性

Math.E欧拉常数,也是自然对数的底数, 约等于 2.718.Math.LN22的自然对数, 约等于0.693.Math.LN1010的自然对数, 约等于 2.303.Math.LOG2E以2为底E的对数, 约等于 1.443.Math.LOG10E以10为底E的对数, 约等于 0.434.Math.PI圆周率,一个圆的周长和直径之比,约等于 3.14159.Math.SQRT1_21/2的平方根, 约等于 0.707.Math.SQRT22的平方根,约等于 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

JavaScript 是一种高级编程语言,通过解释执行,是一门动态类型,面向对象(基于原型)的解释型语言。它已经由ECMA(欧洲电脑制造商协会)通过 ECMAScript 实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器( Chrome、IE、FireFox、Safari、Opera )支持。JavaScript 是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持 I/O,比如网络