JavaScript Math
Math 是一個內置對象, 它具有數學常數和函數的屬性和方法。(MDN)
Math 對象提供了一些列的數學方法和常量,如三角函數、隨機數、π等。
1. 數學方法
數學方法其實就是常用的數學中的函數,如三角函數。
其中用到較多的是使用 Math.random()
來產生隨機數。
以下列舉部分常用的方法。
1.1 Math.floor
Math.floor() 返回小于或等于一個給定數字的最大整數。
Math.floor就是對一個數進行向下取整。
var num1 = Math.floor(2.4);
var num2 = Math.floor(2.9);
console.log(num1); // 輸出:2
console.log(num2); // 輸出:2
因為是向下取整,不會進行四舍五入,所以不論是 2.4
還是 2.9
,經過 Math.floor
處理后,都為 2
。
1.2 Math.ceil
Math.ceil() 函數返回大于或等于一個給定數字的最小整數。
Math.ceil 就是對一個數進行向上取整。
var num1 = Math.ceil(2.4);
var num2 = Math.ceil(2.9);
console.log(num1); // 輸出:3
console.log(num2); // 輸出:3
與 Math.floor 相反,Math.ceil 向上取整,也不會進行四舍五入,所以結果都為 3 。
許多開發者經常會弄混
Math.floor
與Math.ceil
,其實可以根據方法名的中譯來記憶,floor 可以理解成地板,ceil 可以理解成天花板,所以前者是向下取整,后者是向上取整。
1.3 Math.random
Math 下的 random 方法調用后返回一個大于等于零且小于一
的隨機數,即區間 [0, 1)
。
var random = Math.random();
console.log(random);
可以嘗試運行多次這段代碼,random
變量的值出現一樣的概率很低。
事實上 Math.random() 產生的隨機數并不是真正的隨機數,其返回的“隨機數”是由一個確定的算法得出的,這種隨機數會稱之為
偽隨機數
。
1.3.1 隨機數應用
在需要隨機數的需求時,大部分情況下不會是需要一個區間為 [0, 1) 的隨機數,如按學號抽獎。
假設學號的范圍是 1 至 100 ,那就需要產生一個 1 至 100 之間的隨機數。
這樣可以換個思路,隨機數還是生成 [0, 1) 范圍的大小,但是將這個值放大到 [1, 100] 區間的范圍。
所以就可以把隨機數的結果先放大 100 倍,即 Math.random() * 100
,這時候產生的數,區間就是 [0, 100)
。
因為最小值需要的是0,而不是1,就可以將這個隨機數表達式修改成 Math.random() * 100 + 1
,這時候區間就變成了 [1, 101)
。
最后只要保證右側的區間不大于 100 即可,因為右側區間取不到 101 ,所以可以對結果進行向下取整。
最終表達式為:
Math.floor(Math.random() * 100 + 1);
由此就可以推出一個較為通用的隨機數公式:
// 隨機數區間:[下限, 上限]
Math.floor(Math.random() * 上限 + 下限);
2. 數學常量
許多數學常量被作為屬性放在 Math
對象下,如歐拉常數(E)
,圓周率(PI)
。
var e = Math.E;
var pi = Math.PI;
console.log(e); // 輸出:2.718281828459045
console.log(pi); // 輸出:3.141592653589793
日常開發中,大部分情況下會選擇自己維護一個常量,因為可以隨時的統一的修改精度。
3. 常量與方法列表
因為都是常量與方法,這里提供相應的列表供快速查閱,內容引用自 MDN 。
3.1 常量
常量 | 描述 |
---|---|
Math.E | 表示自然對數的底數(或稱為基數),約等于 2.718。 |
Math.LN10 | 表示 10 的自然對數,約為 2.302。 |
Math.LN2 | 表示 2 的自然對數,約為 0.693。 |
Math.LOG10E | 表示以 10 為底數,e 的對數,約為 0.434。 |
Math.LOG2E | 表示以 2 為底數,e 的對數,約為 1.442。 |
Math.PI | 表示一個圓的周長與直徑的比例,約為 3.14159。 |
Math.SQRT1_2 | 屬性表示 1/2 的平方根,約為 0.707。 |
Math.SQRT2 | 表示 2 的平方根,約為 1.414。 |
3.2 方法
方法 | 描述 |
---|---|
Math.abs | 返回一個數的的絕對值。 |
Math.acos | 返回一個數的反余弦值(單位為弧度)。 |
Math.acosh | 返回一個數字的反雙曲余弦值。 |
Math.asin | 返回一個數值的反正弦(單位為弧度)。 |
Math.asinh | 返回給定數字的反雙曲正弦值 |
Math.atan | 返回一個數值的反正切(以弧度為單位) |
Math.atan2 | 返回從原點(0,0)到(x,y)點的線段與x軸正方向之間的平面角度(弧度值)。 |
Math.atanh | 函數返回一個數值反雙曲正切值。 |
Math.cbrt | 返回任意數字的立方根。 |
Math.ceil | 返回大于或等于一個給定數字的最小整數。 |
Math.clz32 | 返回一個數字在轉換成 32 無符號整形數字的二進制形式后, 開頭的 0 的個數。 |
Math.cos | 返回一個數值的余弦值。 |
Math.cosh | 返回數值的雙曲余弦函數。 |
Math.exp | 函數返回 ex,x 表示參數,e 是歐拉常數(Euler’s constant),自然對數的底數。 |
Math.expm1 | 函數返回 Ex - 1, 其中 x 是該函數的參數, E 是自然對數的底數。 |
Math.floor | 返回小于或等于一個給定數字的最大整數。 |
Math.fround | 將任意的數字轉換為離它最近的單精度浮點數形式的數字。 |
Math.hypot | 函數返回它的所有參數的平方和的平方根。 |
Math.imul | 該函數將兩個參數分別轉換為 32 位整數,相乘后返回 32 位結果,類似 C 語言的 32 位整數相乘。 |
Math.log | 返回一個數的自然對數。 |
Math.log10 | 函數返回一個數字以 10 為底的對數。 |
Math.log1p | 函數返回一個數字加1后的自然對數 (底為 E), 即log(x+1)。 |
Math.log2 | 函數返回一個數字以 2 為底的對數。 |
Math.max | 返回一組數中的最大值。 |
Math.min | 返回零個或更多個數值的最小值。 |
Math.pow | 函數返回基數(base)的指數(exponent)次冪,即 baseexponent。 |
Math.random | 函數返回一個浮點, 偽隨機數在范圍從0到小于1,也就是說,從0(包括0)往上,但是不包括1(排除1)。 |
Math.round | 函數返回一個數字四舍五入后最接近的整數。 |
Math.sign | 函數返回一個數字的符號, 指示數字是正數,負數還是零。 |
Math.sin | 函數返回一個數值的正弦值。 |
Math.sinh | 函數返回一個數字(單位為角度)的雙曲正弦值。 |
Math.sqrt | 函數返回一個數的平方根。 |
Math.tan | 返回一個數值的正切值。 |
Math.tanh | 函數將會返回一個數的雙曲正切函數值。 |
Math.trunc | 方法會將數字的小數部分去掉,只保留整數部分。 |
4. 小結
Math 對象包含了很多數學方法與常量,較常用的是用于產生偽隨機數的 Math.random
,根據特性可以推出隨機數 [下限, 上限]
的生成公式 Math.floor(Math.random() * 上限 + 下限);
。
盡量將 Math 對象下的方法過一遍,留住印象,避免造不必要的輪子。