Javascript -- 精通Math对象

273 阅读5分钟

跟Number一样,Math也有很多属性,而且不可再写,基本所有属性全部大写。

Math是一个内置对象, 它具有数学常数和函数的属性和方法。不是一个函数对象。很多API的入参会被强制转化为数字。

属性

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。

方法

Math.abs(x) : 函数返回指定数字 “x“ 的绝对值。

传入一个非数字形式的字符串或者 undefined/empty 变量,将返回 NaN。传入 null 将返回 0。

Math.abs('-1');     // 1
Math.abs(-2);       // 2
Math.abs(null);     // 0
Math.abs("string"); // NaN
Math.abs();         // NaN
Math.abs([]);       // 0

var a=new Array(5);
Math.abs(a);        // NaN

Math.acos() : 返回一个数的反余弦值(单位为弧度)

acos 方法以 -1 到 1 的一个数为参数,返回一个 0 到 pi (弧度)的数值。如果传入的参数值超出了限定的范围,将返回 NaN。

Math.acosh : 返回一个数字的反双曲余弦值

返回指定参数的反双曲余弦值,如果指定的参数小于 1 则返回NaN。

Math.acosh(-1);  // NaN
Math.acosh(0);   // NaN
Math.acosh(0.5); // NaN
Math.acosh(1);   // 0
Math.acosh(2);   // 1.3169578969248166

Math.asin : 方法返回一个数值的反正弦(单位为弧度)

Math.asin(x)

asin 方法接受 -1 到 1 之间的数值作为参数,返回一个介于 - π2 到 π2 弧度的数值。如果接受的参数值超出范围,则返回 NaN。

Math.asin(-2);  // NaN
Math.asin(-1);  // -1.5707963267948966 (-pi/2)
Math.asin(0);   // 0
Math.asin(0.5); // 0.5235987755982989
Math.asin(1);   // 1.570796326794897 (pi/2)
Math.asin(2);   // NaN

Math.asinh : 函数返回给定数字的反双曲正弦值

Math.asinh(x)

Math.atan : 函数返回一个数值的反正切(以弧度为单位)

Math.atan(x)

Math.atan(1);  // 0.7853981633974483
Math.atan(0);  // 0

Math.atan2 : 返回其参数比值的反正切值。

Math.atan2(y, x)

Math.atanh : 函数返回一个数值反双曲正切值

Math.cbrt : 函数返回任意数字的立方根

Math.cbrt(NaN); // NaN
Math.cbrt(-1); // -1
Math.cbrt(-0); // -0
Math.cbrt(-Infinity); // -Infinity
Math.cbrt(0); // 0
Math.cbrt(1); // 1
Math.cbrt(Infinity); // Infinity
Math.cbrt(null); // 0
Math.cbrt(2);  // 1.2599210498948734

Math.ceil : 函数返回大于或等于一个给定数字的最小整数。

Math.ceil(.95);    // 1
Math.ceil(4);      // 4
Math.ceil(7.004);  // 8
Math.ceil(-0.95);  // -0
Math.ceil(-4);     // -4
Math.ceil(-7.004); // -7

Math.clz32() : 函数返回一个数字在转换成 32 无符号整形数字的二进制形式后, 开头的 0 的个数, 比如 1000000 转换成 32 位无符号整形数字的二进制形式后是 00000000000011110100001001000000, 开头的 0 的个数是 12 个, 则 Math.clz32(1000000) 返回 12.

  • 如果 x 不是数字类型, 则它首先会被转换成数字类型, 然后再转成 32 位无符号整形数字.

  • 如果转换后的 32 位无符号整形数字是 0, 则返回 32, 因为此时所有位上都是 0.

  • NaN, Infinity, -Infinity 这三个数字转成 32 位无符号整形数字后都是 0.

    Math.clz32(1) // 31 Math.clz32(1000) // 22 Math.clz32() // 32 [NaN, Infinity, -Infinity, 0, -0, null, undefined, "foo", {}, []].filter(function (n) { return Math.clz32(n) !== 32 }) // [] Math.clz32(true) // 31 Math.clz32(3.5) // 30

Math.cos() : 函数返回一个数值的余弦值。

cos 方法返回一个 -1 到 1 之间的数值,表示角度(单位:弧度)的余弦值。

Math.cos(0);           // 1
Math.cos(1);           // 0.5403023058681398

Math.cos(Math.PI);     // -1
Math.cos(2 * Math.PI); // 1

Math.cosh : 函数返回数值的双曲余弦函数

Math.exp : 函数返回 ex,x 表示参数,e 是欧拉常数(Euler's constant),自然对数的底数。

Math.exp(x)

Math.exp(-1); // 0.36787944117144233
Math.exp(0);  // 1
Math.exp(1);  // 2.718281828459045

Math.expm1 : 函数返回 Ex - 1, 其中 x 是该函数的参数, E 是自然对数的底数 2.718281828459045.

Math.expm1(x)

Math.floor : 返回小于或等于一个给定数字的最大整数。

Math.floor(x)

Math.floor( 45.95); 
Math.floor(-45.05); 

Math.fround : 可以将任意的数字转换为离它最近的单精度浮点数形式的数字。

Math.fround(doubleFloat)

Math.hypot : 函数返回它的所有参数的平方和的平方根。

Math.imul : 返回两个参数的类C的32位整数乘法运算的运算结果.

Math.imul(a, b)

Math.imul(2, 4) // 8
Math.imul(-1, 8) // -8
Math.imul(-2, -2) // 4
Math.imul(0xffffffff, 5) //-5
Math.imul(0xfffffffe, 5) //-10

Math.log : 函数返回一个数的自然对数

Math.log(x)

如果指定的 number 为负数,则返回值为 NaN。

Math.log10 : 函数返回一个数字以 10 为底的对数.

Math.log10

如果传入的参数小于 0, 则返回 NaN.

Math.log10(10)   // 1
Math.log10(100)  // 2
Math.log10("100")// 2
Math.log10(1)    // 0
Math.log10(0)    // -Infinity
Math.log10(-2)   // NaN
Math.log10("foo")// NaN

Math.log1p : 函数返回一个数字加1后的自然对数 (底为 E), 既log(x+1).

Math.log1p(x)

Math.log1p(Math.E-1)  // 1
Math.log1p(0)         // 0
Math.log1p("0")       // 0
Math.log1p(-1)        // -Infinity
Math.log1p(-2)        // NaN
Math.log1p("foo")     // NaN

Math.log2 : 函数返回一个数字以 2 为底的对数.

Math.log2(x)

Math.max : 函数返回一组数中的最大值。

Math.max([value1[,value2, ...]])

返回给定的一组数字中的最大值。如果给定的参数中至少有一个参数无法被转换成数字,则会返回 NaN。

var arr = [1, 2, 3];
var max = Math.max(...arr);

Math.min : 方法可返回指定的数字中带有最小值的数字。

Math.min(n1,n2,n3,...,nX)

参数中最小的值。如果没有参数,则返回 Infinity。如果有某个参数为 NaN,或是不能转换成数字的非数字值,则返回 NaN。

Math.pow : 函数返回基数(base)的指数(exponent)次幂,即 baseexponent

Math.random : 函数返回一个浮点, 伪随机数在范围[0,1)。它不能提供像密码一样安全的随机数字,不能使用它们来处理有关安全的事情。
使用Web Crypto API 来代替, 和更精确的window.crypto.getRandomValues() 方法

Math.round : 函数返回一个数字四舍五入后最接近的整数。

Math.round(4.5)   // 5
Math.round(-4.5)  // -4
Math.round(-4.51) // -5
Math.round(-4.1)  // -4

Math.sign : ie和safari不支持,函数返回一个数字的符号, 指示数字是正数,负数还是零。

Math.sign(x);

此函数共有5种返回值, 分别是 1, -1, 0, -0, NaN. 代表的各是正数, 负数, 正零, 负零, NaN。

传入该函数的参数会被隐式转换成数字类型。

Math.sin : 函数返回一个数值的正弦值。

Math.sinh : ie等不支持,函数返回一个数字(单位为角度)的双曲正弦值.

Math.sqrt(x) : 函数返回一个数的平方根,如果参数 number 为负值,则 sqrt 返回 NaN。

Math.tan : 方法返回一个数值的正切值。

Math.tanh : 函数将会返回一个数的双曲正切函数值

Math.trunc : ie不支持,方法会将数字的小数部分去掉,只保留整数部分。

Math.trunc(13.37)    // 13
Math.trunc(42.84)    // 42
Math.trunc(0.123)    //  0
Math.trunc(-0.123)   // -0
Math.trunc("-1.123") // -1
Math.trunc(NaN)      // NaN
Math.trunc("foo")    // NaN
Math.trunc()         // NaN