Math是具有数据属性和处理数字的方法的对象。你可以把它看作一个伪模块。今天,它可能会被创建为一个模块,但它早在模块之前就存在了。
14.1 数据属性
Math.E: number
^[ES1]^ 欧拉数,自然对数的基数,约为 2.7182818284590452354。Math.LN10: number
^[ES1]^ 10 的自然对数,约为 2.302585092994046。Math.LN2: number
^[ES1]^ 2 的自然对数为,约为 0.6931471805599453。Math.LOG10E: number
^[ES1]^e
的基数为 10 的对数,约为 0.4342944819032518。Math.LOG2E: number
^[ES1]^e
的基数为 2 的对数,约为 1.4426950408889634。Math.PI: number
^[ES1]^ 数学常数 π,圆周长与直径的比值,约为 3.1415926535897932。Math.SQRT1_2: number
^[ES1]^ 1/2 的平方根,约为 0.7071067811865476。Math.SQRT2: number
^[ES1]^ 2 的平方根,约为 1.4142135623730951。
14.2 指数,根,对数
Math.cbrt(x: number): number
^[ES6]^ 返回x
的立方根。> Math.cbrt(8) 2
Math.exp(x: number): number
^[ES1]^ 返回e ** x
(e
为欧拉数)。Math.log()
的逆。> Math.exp(0) 1 > Math.exp(1) === Math.E true
Math.expm1(x: number): number
^[ES6]^ 返回Math.exp(x)-1
。Math.log1p()
的逆。非常小的数字(接近 0 的小数)以更高的精度表示。只要.exp()
的结果接近 1,此函数就会返回更精确的值。Math.log(x: number): number
^[ES1]^ 返回x
的自然对数(基数为e
,欧拉常数)。Math.exp()
的逆。> Math.log(1) 0 > Math.log(Math.E) 1 > Math.log(Math.E ** 2) 2
Math.log1p(x: number): number
^[ES6]^ 返回Math.log(1 + x)
。Math.expm1()
的逆。非常小的数字(接近 0 的徐爱三个月)以更高的精度表示。只要.log()
的参数接近 1,你就可以向此函数提供更精确的数字。Math.log10(x: number): number
^[ES6]^ 返回x
的基数为 10 的对数。10 ** x
的逆。> Math.log10(1) 0 > Math.log10(10) 1 > Math.log10(100) 2
Math.log2(x: number): number
^[ES6]^ 返回x
的基数为 2 的对数。2 ** x
的逆。> Math.log2(1) 0 > Math.log2(2) 1 > Math.log2(4) 2
Math.pow(x: number, y: number): number
^[ES1]^ 计算x
的y
次幂。与x ** y
相同。> Math.pow(2, 3) 8 > Math.pow(25, 0.5) 5
Math.sqrt(x: number): number
^[ES1]^ 返回x
的平方根。x ** 2
的逆。> Math.sqrt(9) 3
14.3 舍入
舍入意味着将任意数字转换为整数(不带小数的数字)。表 15 列出了可用的函数,以及它们为少数代表性输入返回的内容。
表 15:Math
的舍入函数
-2.9 |
-2.5 |
-2.1 |
2.1 |
2.5 |
2.9 |
|
---|---|---|---|---|---|---|
Math.floor |
-3 |
-3 |
-3 |
2 |
2 |
2 |
Math.ceil |
-2 |
-2 |
-2 |
3 |
3 |
3 |
Math.round |
-3 |
-2 |
-2 |
2 |
3 |
3 |
Math.trunc |
-2 |
-2 |
-2 |
2 |
2 |
2 |
Math.ceil(x: number): number
^[ES1]^ 返回x ≤ i
的最小(最接近-∞
)整数i
。> Math.ceil(1.9) 2 > Math.ceil(2.1) 3
Math.floor(x: number): number
^[ES1]^ 返回i ≤ x
的最大(最接近+∞
)整数i
。> Math.floor(1.9) 1 > Math.floor(2.1) 2
Math.round(x: number): number
^[ES1]^ 返回最接近x
的整数(接近正无穷大的整数)。如果x
的小数部分为.5
,则.round()
向上舍入:> Math.round(2.5) 3 > Math.round(-2.5) - 2
Math.trunc(x: number): number
^[ES6]^ 删除x
的小数部分并返回整数结果。> Math.trunc(1.9) 1 > Math.trunc(2.1) 2
14.4 三角函数
所有角度均以弧度表示。使用以下两个函数在度和弧度之间进行转换。
function toRadians(degrees) {
return degrees / 180 * Math.PI;
}
function toDegrees(radians) {
return radians / Math.PI * 180;
}
Math.acos(x: number): number
^[ES1]^ 返回x
的反余弦。> Math.acos(0) 1.5707963267948966 > Math.acos(1) 0
Math.acosh(x: number): number
^[ES6]^ 返回x
的反双曲余弦值。Math.asin(x: number): number
^[ES1]^ 返回x
的反正弦。> Math.asin(0) 0 > Math.asin(1) 1.5707963267948966
Math.asinh(x: number): number
^[ES6]^ 返回x
的反双曲正弦值。Math.atan(x: number): number
^[ES1]^ 返回x
的反正切。Math.atanh(x: number): number
^[ES6]^ 返回x
的反双曲正切值。Math.atan2(y: number, x: number): number
^[ES1]^ 返回商 y / x 的反正切。Math.cos(x: number): number
^[ES1]^ 返回x
的余弦值。> Math.cos(0) 1 > Math.cos(Math.PI) - 1
Math.cosh(x: number): number
^[ES6]^ 返回x
的双曲余弦值。Math.hypot(...values: number[]): number
^[ES6]^ 返回values
(毕达哥拉斯定理)的平方和的平方根:> Math.hypot(3, 4) 5
Math.sin(x: number): number
^[ES1]^ 返回x
的正弦值。> Math.sin(0) 0 > Math.sin(Math.PI / 2) 1
Math.sinh(x: number): number
^[ES6]^ 返回x
的双曲正弦值。Math.tan(x: number): number
^[ES1]^ 返回x
的正切值。> Math.tan(0) 0 > Math.tan(1) 1.5574077246549023
Math.tanh(x: number): number;
^[ES6]^ 返回x
的双曲正切值。
14.5 asm.js 助手
WebAssembly 是一个基于 JavaScript 的虚拟机,大多数 JavaScript 引擎都支持它。
asm.js 是 WebAssembly 的前身。如果编译静态语言(例如 C++),它是 JavaScript 的一个子集,可以生成快速可执行文件。在某种程度上,它也是一个虚拟机,在 JavaScript 的范围内。
以下两种方法有助于 asm.js,并且几乎没有用例。
Math.fround(x: number): number
^[ES6]^ 将x
舍入为 32 位浮点值(float
)。asm.js 告诉引擎在内部使用float
值(正常数字是双精度并占用 64 位)。Math.imul(x: number, y: number): number
^[ES6]^ 将两个 32 位整数x
和y
相乘,并返回结果的低 32 位。需要 asm.js 。通过将 64 位结果强制转换为 32 位,可以模拟所有其他基本的 32 位数学运算。使用乘法,您可能会丢失超过 32 位的结果位。
14.6 各种其他函数
Math.abs(x: number): number
^[ES1]^ 返回x
的绝对值。> Math.abs(3) 3 > Math.abs(-3) 3 > Math.abs(0) 0
Math.clz32(x: number): number
^[ES6]^ 计算 32 位整数x
中的前导零位。用于 DSP 算法。> Math.clz32(0b01000000000000000000000000000000) 1 > Math.clz32(0b00100000000000000000000000000000) 2 > Math.clz32(2) 30 > Math.clz32(1) 31
Math.max(...values: number[]): number
^[ES1]^ 将values
转换为数字并返回最大的数字。> Math.max(3, -5, 24) 24
Math.min(...values: number[]): number
^[ES1]^ 将values
转换为数字并返回最小的数字。> Math.min(3, -5, 24) - 5
Math.random(): number
^[ES1]^ 返回伪随机数n
,其中0 ≤ n < 1
。 计算随机整数i
,其中0 ≤ i < max
:function getRandomInteger(max) { return Math.floor(Math.random() * max); }
Math.sign(x: number): number
^[ES6]^ 返回数字的符号:> Math.sign(-8) - 1 > Math.sign(0) 0 > Math.sign(3) 1
14.7 来源
下一节:Unicode 是在世界上大多数书写系统中表示和管理文本的标准。几乎所有使用文本的现代软件都支持 Unicode。该标准由 Unicode Consortium 维护。该标准的新版本每年发布(带有新的 Emoji 等)。 Unicode 1 于 1991 年发布。