Math API

屬性

Math.E 表示自然對數的底數(或稱為基數),e,約等于 2.718。

function getNapier() {
   return Math.E
}

getNapier() // 2.718281828459045

方法

1、Math.abs() 函數返回指定數字 “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

2、Math.acos() 返回一個數的反余弦值(單位為弧度)
描述:

  • acos 方法以 -11 的一個數為參數,返回一個 0pi(弧度)的數值。如果傳入的參數值超出了限定的范圍,將返回 NaN。
  • 由于acosMath 的靜態方法,所以應該像這樣使用:Math.acos(),而不是作為你創建的 Math實例的屬性(Math 不是一個構造函數)。
Math.acos(-2);  // NaN
Math.acos(-1);  // 3.141592653589793
Math.acos(0);   // 1.5707963267948966
Math.acos(0.5); // 1.0471975511965979
Math.acos(1);   // 0
Math.acos(2);   // NaN

3、Math.acosh() 返回一個數字的反雙曲余弦值
描述:因為acosh()Math對象的靜態方法,所以你應該像這樣使用它:Math.acosh(), 而不是作為你創建的Math實例的屬性(Math不是構造函數)。

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

返回指定參數的反雙曲余弦值,如果指定的參數小于 1 則返回NaN

4、Math.asin() 方法返回一個數值的反正弦(單位為弧度)
描述

  • asin 方法接受 -11 之間的數值作為參數,返回一個介于 - π2π2 弧度的數值。如果接受的參數值超出范圍,則返回 NaN。
  • 由于 asinMath 的靜態方法,所有應該像這樣使用:Math.asin(),而不是作為你創建的 Math 實例的方法。
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

對于小于 -1或大于 1 的參數值,Math.asin 返回 NaN。

5、Math.asinh() 函數返回給定數字的反雙曲正弦值
返回值:給定數值的反雙曲正弦值
描述:由于asinh()Math的靜態方法, 用戶應該直接通過Math.asinh()來使用, 而不是先創建出Math對象再調用該方法(Math不是一個構造器)。

Math.asinh(1);  // 0.881373587019543
Math.asinh(0);  // 0

其他實現方式
由于arsinh ( x ) = ln ( x + √x2 + 1 ),因此該函數可以被如下的函數所模擬:

Math.asinh = Math.asinh || function(x) {
  if (x === -Infinity) {
    return x;
  } else {
    return Math.log(x + Math.sqrt(x * x + 1));
  }
}

6、Math.atan() 函數返回一個數值的反正切(以弧度為單位)

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

7、Math.atan2() 返回其參數比值的反正切值
描述

  • atan2 方法返回一個 -pipi 之間的數值,表示點 (x, y) 對應的偏移角度。這是一個逆時針角度,以弧度為單位,正X軸和點(x, y) 與原點連線 之間。注意此函數接受的參數:先傳遞 y 坐標,然后是 x 坐標。
  • atan2 接受單獨的 xy 參數,而atan 接受兩個參數的比值。
Math.atan2(90, 15) // 1.4056476493802699
Math.atan2(15, 90) // 0.16514867741462683

Math.atan2( ±0, -0 )               // ±PI.
Math.atan2( ±0, +0 )               // ±0.
Math.atan2( ±0, -x )               // ±PI for x > 0.
Math.atan2( ±0, x )                // ±0 for x > 0.
Math.atan2( -y, ±0 )               // -PI/2 for y > 0.
Math.atan2( y, ±0 )                // PI/2 for y > 0.
Math.atan2( ±y, -Infinity )        // ±PI for finite y > 0.
Math.atan2( ±y, +Infinity )        // ±0 for finite y > 0.
Math.atan2( ±Infinity, x )         // ±PI/2 for finite x.
Math.atan2( ±Infinity, -Infinity ) // ±3*PI/4.
Math.atan2( ±Infinity, +Infinity ) // ±PI/4.

8、Math.atanh() 函數返回一個數值反雙曲正切值

Math.atanh(-2);  // NaN
Math.atanh(-1);  // -Infinity
Math.atanh(0);   // 0
Math.atanh(0.5); // 0.5493061443340548
Math.atanh(1);   // Infinity
Math.atanh(2);   // NaN

9、Math.cbrt() 函數返回任意數字的立方根(ES6規范)
描述:參數 x 會被自動類型轉換成 number 類型。cbrt"cube root" 的縮寫, 意思是立方根.

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

10、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

11、Math.clz32() 函數返回一個數字在轉換成 32 無符號整形數字的二進制形式后, 開頭的 0 的個數, 比如 1000000 轉換成 32 位無符號整形數字的二進制形式后是 00000000000011110100001001000000, 開頭的0 的個數是 12 個, 則 Math.clz32(1000000) 返回 12.(ES6規范)
描述:

  • "clz32"CountLeadingZeroes32 的縮寫.
  • 如果 x 不是數字類型, 則它首先會被轉換成數字類型, 然后再轉成 32 位無符號整形數字.
  • 如果轉換后的32 位無符號整形數字是 0, 則返回 32, 因為此時所有位上都是0.
  • NaN, Infinity, -Infinity 這三個數字轉成 32 位無符號整形數字后都是 0.
  • 這個函數主要用于那些編譯目標為 JS 語言的系統中, 比如 Emscripten.
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 方法返回一個-11 之間的數值,表示角度(單位:弧度)的余弦值。

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

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

12、Math.cosh() 函數返回數值的雙曲余弦函數

Math.cosh(0);  // 1
Math.cosh(1);  // 1.5430806348152437
Math.cosh(-1); // 1.5430806348152437

13、Math.exp() 函數返回 ex,x 表示參數,e歐拉常數(Euler's constant),自然對數的底數。

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

14、Math.expm1() 函數返回Ex- 1, 其中x 是該函數的參數, E 是自然對數的底數 2.718281828459045.
描述:參數 x 會被自動類型轉換成 number 類型。expm1"exponent minus 1"的縮寫.

Math.expm1(1)     // 1.7182818284590453
Math.expm1(-38)   // -1
Math.expm1("-38") // -1
Math.expm1("foo") // NaN

15、Math.floor() 向下取整

Math.floor( 45.95); 
// 45 
Math.floor( 45.05); 
// 45 
Math.floor( 4 ); 
// 4 
Math.floor(-45.05); 
// -46 
Math.floor(-45.95); 
// -46

16、Math.fround() 可以將任意的數字轉換為離它最近的單精度浮點數形式的數字
描述:

  • JavaScript 內部使用64位的雙浮點數字,支持很高的精度。但是,有時你需要用32位浮點數字,比如你從一個Float32Array 類型數組代表的是平臺字節順序為32位的浮點數型數組(對應于 C 浮點數據類型) 。 如果需要控制字節順序, 使用 DataView 替代。其內容初始化為0。一旦建立起來,你可以使用這個對象的方法對其元素進行操作,或者使用標準數組索引語法 (使用方括號)。") 讀取值時。這時會產生混亂:檢查一個64位浮點數和一個32位浮點數是否相等會失敗,即使二個數字幾乎一模一樣。
  • 要解決這個問題,可以使用 Math.fround() 來將64位的浮點數轉換為32位浮點數。在內部,JavaScript繼續把這個數字作為64位浮點數看待,僅僅是在尾數部分的第23位執行了“舍入到偶數”的操作,并將后續的尾數位設置為0。如果數字超出32位浮點數的范圍,則返回 Infinity全局屬性 Infinity 是一個數值,表示無窮大。")或 -Infinity。

數字1.5可以在二進制數字系統中精確表示,32位和64位的值相同:

Math.fround(1.5); // 1.5
Math.fround(1.5) === 1.5; // true

但是,數字1.337卻無法在二進制數字系統中精確表示,所以32位和64位的值是不同的:

Math.fround(1.337); // 1.3370000123977661
Math.fround(1.337) === 1.337; // false

2150 超出32位浮點,所以返回Infinity:

2 ** 150; // 1.42724769270596e+45
Math.fround(2 ** 150); // Infinity

如果參數無法轉換成數字,或者為 NaN全局屬性NaN表示 Not-A-Number 的值。") (NaN),Math.fround() 會返回 NaN

Math.fround('abc'); // NaN
Math.fround(NaN); // NaN

在某些精度不高的場合下,可以通過將二個浮點數轉換成32位浮點數進行比較,以解決64位浮點數比較結果不正確的問題:

0.1 + 0.2 == 0.3;    //false

function equal(v1, v2) {
    return Math.fround(v1) == Math.fround(v2);
}

equal(0.1 + 0.2, 0.3);   //true

17、Math.hypot() 函數返回它的所有參數的平方和的平方根
描述:

  • 如果不傳入任何參數, 則返回 +0 .
  • 如果參數列表中有至少一個參數不能被轉換為數字,則返回 NaN
  • 如果只傳入一個參數, 則 Math.hypot(x) 的效果等同于 Math.abs(x).
Math.hypot(3, 4)        // 5
Math.hypot(3, 4, 5)     // 7.0710678118654755
Math.hypot()            // 0
Math.hypot(NaN)         // NaN
Math.hypot(3, 4, "foo") // NaN, +"foo" => NaN
Math.hypot(3, 4, "5")   // 7.0710678118654755, +"5" => 5
Math.hypot(-3)          // 3, the same as Math.abs(-3)

18、Math.imul() 該函數返回兩個參數的類c32位整數乘法運算的運算結果

語法:
Math.imul(a, b)
 // 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

19、Math.log() 函數返回一個數的自然對數
描述:如果指定的 number 為負數,則返回值為 NaN。

例子1:使用Math.log
下面的函數返回指定變量的自然對數:

Math.log(-1); // NaN, out of range
Math.log(0); // -Infinity
Math.log(1); // 0
Math.log(10); // 2.302585092994046

例子2: 使用Math.log時基于不同的底數
下面的函數返回以 x 為底 y 的對數(即logx y):

function getBaseLog(x, y) {
    return Math.log(y) / Math.log(x);
}
如果你運行 getBaseLog(10, 1000),則會返回2.9999999999999996,非常接近實際答案:3,原因是浮點數精度問題。

20、Math.log10() 函數返回一個數字以 10 為底的對數,如果傳入的參數小于 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

21、Math.log1p() 函數返回一個數字加1后的自然對數 (底為 E), 既log(x+1)
描述:如果參數的值小于 -1, 則返回 NaN.

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

函數 y = log(x+1) 的圖形是這樣的:

image.png

22、Math.log2() 函數返回一個數字以 2 為底的對數,如果傳入的參數小于 0, 則返回 NaN.

Math.log2(2)     // 1
Math.log2(1024)  // 10
Math.log2(1)     // 0
Math.log2(0)     // -Infinity
Math.log2(-2)    // NaN
Math.log2("1024")// 10
Math.log2("foo") // NaN

23、Math.max() 函數返回一組數中的最大值
語法:Math.max([value1[,value2, ...]])
返回值:返回給定的一組數字中的最大值。如果給定的參數中至少有一個參數無法被轉換成數字,則會返回NaN
描述:

  • 如果沒有參數,則結果為- Infinity
  • 如果有任一參數不能被轉換為數值,則結果為NaN
Math.max(10, 20);   //  20
Math.max(-10, -20); // -10
Math.max(-10, 20);  //  20

下面的方法使用 apply() 方法尋找一個數值數組中的最大元素。getMaxOfArray([1,2,3]) 等價于 Math.max(1, 2, 3),但是你可以使用 getMaxOfArray ()作用于任意長度的數組上。

function getMaxOfArray(numArray) {
    return Math.max.apply(null, numArray);
}

或者通過使用最新的擴展語句spread operator,獲得數組中的最大值變得更容易。

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

22、Math.min() 返回零個或更多個數值的最小值

  • 給定數值中最小的數。如果任一參數不能轉換為數值,則返回NaN
    下例找出 x 和 y 的最小值,并把它賦值給 z:
var x = 10, y = -20;
var z = Math.min(x, y);

使用 Math.min() 裁剪值(Clipping a value)
Math.min 經常用于裁剪一個值,以便使其總是小于或等于某個邊界值。例如:

var x = f(foo);

if (x > boundary) {
    x = boundary;
}
可以寫成
var x = Math.min(f(foo), boundary);

另外,Math.max()也可以被用來以相似的方式裁剪一個值

23、Math.pow() 函數返回基數 (base)的指數(exponent)次冪,即 baseexponent
語法:Math.pow(base, exponent)
參數:

  • base:基數
  • exponent:指數
function raisePower(x,y) {
   return Math.pow(x,y)
}
如果 x 是 7 ,且 y 是 2,則 raisePower 函數返回 49 (7 的 2 次冪)

24、Math.random() 函數返回一個浮點, 偽隨機數在范圍[0,1),也就是說,從0(包括0)往上,但是不包括1(排除1),然后您可以縮放到所需的范圍。實現將初始種子選擇到隨機數生成算法;它不能被用戶選擇或重置。他不能被用戶選擇或重置

得到一個大于等于0,小于1之間的隨機數

function getRandom() {
  return Math.random();
}

得到一個兩數之間的隨機數
這個例子返回了一個在指定值之間的隨機數。這個值比min大(可能與min相等), 以及比max小(但是不等于max).

function getRandomArbitrary(min, max) {
  return Math.random() * (max - min) + min;
}

得到一個兩數之間的隨機整數
這個例子返回了一個在指定值之間的隨機整數。這個值比min大(如果min不是整數,那么下一個整數大于min), 以及比max小(但是不等于max).

function getRandomInt(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min)) + min; //The maximum is exclusive and the minimum is inclusive
}

得到一個兩數之間的隨機整數,包括兩個數在內
getRandomInt() 函數在最小值之上,它將排除最大值. 如果你需要結果包含最小值和最大值,怎么辦呢? getRandomIntInclusive() 函數將能完成.

function getRandomIntInclusive(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min + 1)) + min; //The maximum is inclusive and the minimum is inclusive 
}

25、Math.round() 函數返回一個數字四舍五入后最接近的整數
描述:如果參數的小數部分大于0.5,則舍入到下一個絕對值更大的整數。如果參數的小數部分小于0.5,則舍入到下一個絕對值更小的整數。如果參數的小數部分恰好等于0.5,見分曉舍入到下一個在正無窮方向中的整數。注意:與很多其他評議中的round()函數不同,Math.round()并不總是舍入到遠離0的方向(尤其是在負數的小數部分愉好等于0.5的情況下)

x = Math.round(20.49)  // 20
x = Math.round(20.5)  // 21
x = Math.round(-20.5)  // -20
x = Math.round(-20.51)  // -21

26、Math.sign() 函數返回一個數字的符號, 指示數字是正數,負數還是零
描述:

  • 此函數共有5種返回值, 分別是 1, -1, 0, -0, NaN. 代表的各是正數, 負數, 正零, 負零, NaN。
  • 傳入該函數的參數會被隱式轉換成數字類型。
Math.sign(3);     //  1
Math.sign(-3);    // -1
Math.sign("-3");  // -1
Math.sign(0);     //  0
Math.sign(-0);    // -0
Math.sign(NaN);   // NaN
Math.sign("foo"); // NaN
Math.sign();      // NaN

27、Math.sin() 函數返回一個數值的正弦值
sin 方法返回一個 -11 之間的數值,表示給定角度(單位:弧度)的正弦值。

Math.sin(0);           // 0
Math.sin(1);           // 0.8414709848078965

Math.sin(Math.PI / 2); // 1

28、 Math.sinh() 函數返回一個數字(單位為角度)的雙曲正弦值

Math.sinh(0)      // 0
Math.sinh(1)      // 1.1752011936438014
Math.sinh("-1")   // -1.1752011936438014
Math.sinh("foo")  // NaN

雙曲正弦的圖像如下:

image.png

29、Math.sqrt() 函數返回一個數的平方根
如果參數 number 為負值,則sqrt返回 NaN

Math.sqrt(9); // 3
Math.sqrt(2); // 1.414213562373095

Math.sqrt(1);  // 1
Math.sqrt(0);  // 0
Math.sqrt(-1); // NaN

Math.tan() 方法返回一個數值的正切值
tan 方法返回一個數值,表示一個角的正切值。

下面的函數返回變量 x 的正切值:

function getTan(x) {
   return Math.tan(x);
}
由于 Math.tan() 函數接受弧度數值,但是通常使用度更方便,下面的函數可以接受以度為單位的數值,將其轉為弧度,然后返回其正切值。

function getTanDeg(deg) {
   var rad = deg * Math.PI/180;
   return Math.tan(rad);
}

30、Math.tanh() 函數將會返回一個數的雙曲正切函數值

Math.tanh(0);        // 0
Math.tanh(Infinity); // 1
Math.tanh(1);        // 0.7615941559557649

多種實現方式

tanh()可以通過Math.exp()函數來構擬:
Math.tanh = Math.tanh || function(x) {
  if (x === Infinity) {
    return 1;
  } else if (x === -Infinity) {
    return -1;
  } else {
    return (Math.exp(x) - Math.exp(-x)) / (Math.exp(x) + Math.exp(-x));
  }
}

或者只調用一次Math.exp():
Math.tanh = Math.tanh || function(x) {
  if (x === Infinity) {
    return 1;
  } else if (x === -Infinity) {
    return -1;
  } else {
    var y = Math.exp(2 * x);
    return (y - 1) / (y + 1);
  }
}

31、Math.trunc() 方法會將數字的小數部分去掉,只保留整數部分
傳入該方法的參數會被隱式轉換成數字類型

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
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執行單位為行(line),也就是一...
    悟名先生閱讀 4,207評論 0 13
  • 在編程中我們總要進行一些數學運算以及數字處理,尤其是浮點數的運算和處理,這篇文章主要介紹C語言下的數學庫。而其他語...
    歐陽大哥2013閱讀 5,346評論 0 12
  • 第3章 基本概念 3.1 語法 3.2 關鍵字和保留字 3.3 變量 3.4 數據類型 5種簡單數據類型:Unde...
    RickCole閱讀 5,162評論 0 21
  • 誰令北海少明燈?浩渺煙波不見人! 誰令孤夜雨紛紛?恨卷珠簾欲斷魂! 誰令月昏云影深?春風不度九州冷! 誰令千山遮暮...
    有狐在沔閱讀 693評論 0 0
  • 天邊半輪月 窗外滿城燈 繁華原似夢 不忍到天明 -----平安夜(新韻).阿懶 2017-12
    飛芒阿懶閱讀 104評論 0 0