屬性
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 方法以
-1
到1
的一個數為參數,返回一個0
到pi
(弧度)的數值。如果傳入的參數值超出了限定的范圍,將返回NaN
。 - 由于
acos
是Math
的靜態方法,所以應該像這樣使用: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 方法接受
-1
到1
之間的數值作為參數,返回一個介于- π2
到π2
弧度的數值。如果接受的參數值超出范圍,則返回 NaN。 - 由于
asin
是Math
的靜態方法,所有應該像這樣使用: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
方法返回一個-pi
到pi
之間的數值,表示點(x, y)
對應的偏移角度。這是一個逆時針角度,以弧度為單位,正X
軸和點(x, y)
與原點連線 之間。注意此函數接受的參數:先傳遞y
坐標,然后是x
坐標。 -
atan2
接受單獨的x
和y
參數,而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
方法返回一個-1
到 1
之間的數值,表示角度(單位:弧度)的余弦值。
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() 函數返回 e
x,x
表示參數,e
是歐拉常數(Euler's constant)
,自然對數的底數。
Math.exp(-1); // 0.36787944117144233
Math.exp(0); // 1
Math.exp(1); // 2.718281828459045
14、Math.expm1() 函數返回E
x- 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() 該函數返回兩個參數的類c
的32
位整數乘法運算的運算結果
語法:
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)
的圖形是這樣的:
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)
次冪,即 base
exponent
語法: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
方法返回一個 -1
到 1
之間的數值,表示給定角度(單位:弧度)的正弦值。
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
雙曲正弦的圖像如下:
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