屬性
Math.E 表示自然對數(shù)的底數(shù)(或稱為基數(shù))融柬,e,約等于 2.718务甥。
function getNapier() {
return Math.E
}
getNapier() // 2.718281828459045
方法
1牡辽、Math.abs() 函數(shù)返回指定數(shù)字 “x“
的絕對值。
傳入一個非數(shù)字形式的字符串或者 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() 返回一個數(shù)的反余弦值(單位為弧度)
描述:
- acos 方法以
-1
到1
的一個數(shù)為參數(shù)奏黑,返回一個0
到pi
(弧度)的數(shù)值炊邦。如果傳入的參數(shù)值超出了限定的范圍,將返回NaN
熟史。 - 由于
acos
是Math
的靜態(tài)方法馁害,所以應(yīng)該像這樣使用:Math.acos()
戏售,而不是作為你創(chuàng)建的Math
實例的屬性(Math
不是一個構(gòu)造函數(shù))懊直。
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() 返回一個數(shù)字的反雙曲余弦值
描述:因為acosh()
是Math
對象的靜態(tài)方法官地,所以你應(yīng)該像這樣使用它:Math.acosh()
, 而不是作為你創(chuàng)建的Math
實例的屬性(Math
不是構(gòu)造函數(shù))怒详。
Math.acosh(-1); // NaN
Math.acosh(0); // NaN
Math.acosh(0.5); // NaN
Math.acosh(1); // 0
Math.acosh(2); // 1.3169578969248166
返回指定參數(shù)的反雙曲余弦值,如果指定的參數(shù)小于 1
則返回NaN
4踪区、Math.asin() 方法返回一個數(shù)值的反正弦(單位為弧度)
描述
- asin 方法接受
-1
到1
之間的數(shù)值作為參數(shù)昆烁,返回一個介于- π2
到π2
弧度的數(shù)值。如果接受的參數(shù)值超出范圍缎岗,則返回 NaN静尼。 - 由于
asin
是Math
的靜態(tài)方法,所有應(yīng)該像這樣使用:Math.asin()
传泊,而不是作為你創(chuàng)建的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
的參數(shù)值,Math.asin
返回 NaN
眷细。
5拦盹、Math.asinh() 函數(shù)返回給定數(shù)字的反雙曲正弦值
返回值:給定數(shù)值的反雙曲正弦值
描述:由于asinh()
是Math
的靜態(tài)方法, 用戶應(yīng)該直接通過Math.asinh()
來使用, 而不是先創(chuàng)建出Math
對象再調(diào)用該方法(Math
不是一個構(gòu)造器)。
Math.asinh(1); // 0.881373587019543
Math.asinh(0); // 0
其他實現(xiàn)方式
由于arsinh ( x ) = ln ( x + √x2 + 1 )溪椎,因此該函數(shù)可以被如下的函數(shù)所模擬:
Math.asinh = Math.asinh || function(x) {
if (x === -Infinity) {
return x;
} else {
return Math.log(x + Math.sqrt(x * x + 1));
}
}
6普舆、Math.atan() 函數(shù)返回一個數(shù)值的反正切(以弧度為單位)
Math.atan(1); // 0.7853981633974483
Math.atan(0); // 0
7、Math.atan2() 返回其參數(shù)比值的反正切值
描述
-
atan2
方法返回一個-pi
到pi
之間的數(shù)值校读,表示點(x, y)
對應(yīng)的偏移角度沼侣。這是一個逆時針角度,以弧度為單位歉秫,正X
軸和點(x, y)
與原點連線 之間蛾洛。注意此函數(shù)接受的參數(shù):先傳遞y
坐標,然后是x
坐標雁芙。 -
atan2
接受單獨的x
和y
參數(shù)轧膘,而atan
接受兩個參數(shù)的比值。
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() 函數(shù)返回一個數(shù)值反雙曲正切值
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() 函數(shù)返回任意數(shù)字的立方根
(ES6規(guī)范)
描述:參數(shù) x
會被自動類型轉(zhuǎn)換成 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() 函數(shù)返回一個數(shù)字在轉(zhuǎn)換成 32
無符號整形數(shù)字的二進制形式后, 開頭的 0
的個數(shù), 比如 1000000
轉(zhuǎn)換成 32
位無符號整形數(shù)字的二進制形式后是 00000000000011110100001001000000
, 開頭的0
的個數(shù)是 12
個, 則 Math.clz32(1000000)
返回 12
.(ES6規(guī)范)
描述:
-
"clz32"
是CountLeadingZeroes32
的縮寫. - 如果
x
不是數(shù)字類型, 則它首先會被轉(zhuǎn)換成數(shù)字類型, 然后再轉(zhuǎn)成32
位無符號整形數(shù)字. - 如果轉(zhuǎn)換后的
32
位無符號整形數(shù)字是0
, 則返回32
, 因為此時所有位上都是0
. -
NaN, Infinity, -Infinity
這三個數(shù)字轉(zhuǎn)成32
位無符號整形數(shù)字后都是0
. - 這個函數(shù)主要用于那些編譯目標為
JS
語言的系統(tǒng)中, 比如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() 函數(shù)返回一個數(shù)值的余弦值
描述:cos
方法返回一個-1
到 1
之間的數(shù)值太援,表示角度(單位:弧度)的余弦值。
Math.cos(0); // 1
Math.cos(1); // 0.5403023058681398
Math.cos(Math.PI); // -1
Math.cos(2 * Math.PI); // 1
12扳碍、Math.cosh() 函數(shù)返回數(shù)值的雙曲余弦函數(shù)
Math.cosh(0); // 1
Math.cosh(1); // 1.5430806348152437
Math.cosh(-1); // 1.5430806348152437
13提岔、Math.exp() 函數(shù)返回 e
x,x
表示參數(shù)笋敞,e
是歐拉常數(shù)(Euler's constant)
碱蒙,自然對數(shù)的底數(shù)。
Math.exp(-1); // 0.36787944117144233
Math.exp(0); // 1
Math.exp(1); // 2.718281828459045
14夯巷、Math.expm1() 函數(shù)返回E
x- 1
, 其中x
是該函數(shù)的參數(shù), E
是自然對數(shù)的底數(shù) 2.718281828459045
.
描述:參數(shù) x
會被自動類型轉(zhuǎn)換成 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() 可以將任意的數(shù)字轉(zhuǎn)換為離它最近的單精度浮點數(shù)
形式的數(shù)字
描述:
-
JavaScript
內(nèi)部使用64
位的雙浮點數(shù)字喷兼,支持很高的精度。但是后雷,有時你需要用32
位浮點數(shù)字季惯,比如你從一個Float32Array
類型數(shù)組代表的是平臺字節(jié)順序為32
位的浮點數(shù)型數(shù)組(對應(yīng)于C
浮點數(shù)據(jù)類型) 。 如果需要控制字節(jié)順序臀突, 使用DataView
替代勉抓。其內(nèi)容初始化為0
。一旦建立起來候学,你可以使用這個對象的方法對其元素進行操作藕筋,或者使用標準數(shù)組索引語法 (使用方括號)。") 讀取值時梳码。這時會產(chǎn)生混亂:檢查一個64
位浮點數(shù)和一個32
位浮點數(shù)是否相等會失敗念逞,即使二個數(shù)字幾乎一模一樣。 - 要解決這個問題边翁,可以使用
Math.fround()
來將64
位的浮點數(shù)轉(zhuǎn)換為32
位浮點數(shù)翎承。在內(nèi)部,JavaScript
繼續(xù)把這個數(shù)字作為64
位浮點數(shù)看待符匾,僅僅是在尾數(shù)部分的第23
位執(zhí)行了“舍入到偶數(shù)”的操作叨咖,并將后續(xù)的尾數(shù)位設(shè)置為0
。如果數(shù)字超出32
位浮點數(shù)的范圍啊胶,則返回Infinity
全局屬性Infinity
是一個數(shù)值甸各,表示無窮大。")或-Infinity
焰坪。
數(shù)字1.5可以在二進制數(shù)字系統(tǒng)中精確表示趣倾,32位和64位的值相同:
Math.fround(1.5); // 1.5
Math.fround(1.5) === 1.5; // true
但是,數(shù)字1.337卻無法在二進制數(shù)字系統(tǒng)中精確表示某饰,所以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
如果參數(shù)無法轉(zhuǎn)換成數(shù)字善绎,或者為 NaN
全局屬性NaN
表示 Not-A-Number
的值。") (NaN
)诫尽,Math.fround()
會返回 NaN
:
Math.fround('abc'); // NaN
Math.fround(NaN); // NaN
在某些精度不高的場合下禀酱,可以通過將二個浮點數(shù)轉(zhuǎn)換成32
位浮點數(shù)進行比較,以解決64
位浮點數(shù)比較結(jié)果不正確的問題:
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() 函數(shù)返回它的所有參數(shù)的平方和的平方根
描述:
- 如果不傳入任何參數(shù), 則返回
+0
. - 如果參數(shù)列表中有至少一個參數(shù)不能被轉(zhuǎn)換為數(shù)字剂跟,則返回
NaN
- 如果只傳入一個參數(shù), 則
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() 該函數(shù)返回兩個參數(shù)的類c
的32
位整數(shù)乘法運算的運算結(jié)果
語法:
Math.imul(a, b)
// a 被乘數(shù).
// b 乘數(shù).
例:
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() 函數(shù)返回一個數(shù)的自然對數(shù)
描述:如果指定的 number 為負數(shù)曹洽,則返回值為 NaN。
例子1:使用Math.log
下面的函數(shù)返回指定變量的自然對數(shù):
Math.log(-1); // NaN, out of range
Math.log(0); // -Infinity
Math.log(1); // 0
Math.log(10); // 2.302585092994046
例子2: 使用Math.log時基于不同的底數(shù)
下面的函數(shù)返回以 x 為底 y 的對數(shù)(即logx y):
function getBaseLog(x, y) {
return Math.log(y) / Math.log(x);
}
如果你運行 getBaseLog(10, 1000)辽剧,則會返回2.9999999999999996送淆,非常接近實際答案:3,原因是浮點數(shù)精度問題抖仅。
20、Math.log10() 函數(shù)返回一個數(shù)字以 10 為底的對數(shù)砖第,如果傳入的參數(shù)小于 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() 函數(shù)返回一個數(shù)字加1后的自然對數(shù) (底為 E
), 既log(x+1)
描述:如果參數(shù)的值小于 -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
函數(shù) y = log(x+1)
的圖形是這樣的:
22、Math.log2() 函數(shù)返回一個數(shù)字以 2 為底的對數(shù)梧兼,如果傳入的參數(shù)小于 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() 函數(shù)返回一組數(shù)中的最大值
語法:Math.max([value1[,value2, ...]])
返回值:返回給定的一組數(shù)字中的最大值。如果給定的參數(shù)中至少有一個參數(shù)無法被轉(zhuǎn)換成數(shù)字羽杰,則會返回NaN
描述:
- 如果沒有參數(shù)渡紫,則結(jié)果為
- Infinity
- 如果有任一參數(shù)不能被轉(zhuǎn)換為數(shù)值,則結(jié)果為
NaN
Math.max(10, 20); // 20
Math.max(-10, -20); // -10
Math.max(-10, 20); // 20
下面的方法使用 apply()
方法尋找一個數(shù)值數(shù)組中的最大元素考赛。getMaxOfArray([1,2,3])
等價于 Math.max(1, 2, 3)
惕澎,但是你可以使用 getMaxOfArray
()作用于任意長度的數(shù)組上。
function getMaxOfArray(numArray) {
return Math.max.apply(null, numArray);
}
或者通過使用最新的擴展語句spread operator
颜骤,獲得數(shù)組中的最大值變得更容易唧喉。
var arr = [1, 2, 3];
var max = Math.max(...arr);
22、Math.min() 返回零個或更多個數(shù)值的最小值
- 給定數(shù)值中最小的數(shù)忍抽。如果任一參數(shù)不能轉(zhuǎn)換為數(shù)值八孝,則返回NaN
下例找出 x 和 y 的最小值,并把它賦值給 z:
var x = 10, y = -20;
var z = Math.min(x, y);
使用 Math.min()
裁剪值(Clipping a value)
Math.min
經(jīng)常用于裁剪一個值鸠项,以便使其總是小于或等于某個邊界值干跛。例如:
var x = f(foo);
if (x > boundary) {
x = boundary;
}
可以寫成
var x = Math.min(f(foo), boundary);
另外,Math.max()
也可以被用來以相似的方式裁剪一個值
23祟绊、Math.pow() 函數(shù)返回基數(shù) (base)
的指數(shù)(exponent)
次冪楼入,即 base
exponent
語法:Math.pow(base, exponent)
參數(shù):
- base:基數(shù)
- exponent:指數(shù)
function raisePower(x,y) {
return Math.pow(x,y)
}
如果 x 是 7 哥捕,且 y 是 2,則 raisePower 函數(shù)返回 49 (7 的 2 次冪)
24浅辙、Math.random() 函數(shù)返回一個浮點, 偽隨機數(shù)在范圍[0扭弧,1),也就是說记舆,從0(包括0)往上鸽捻,但是不包括1(排除1),然后您可以縮放到所需的范圍泽腮。實現(xiàn)將初始種子選擇到隨機數(shù)生成算法;它不能被用戶選擇或重置御蒲。他不能被用戶選擇或重置
得到一個大于等于0,小于1之間的隨機數(shù)
function getRandom() {
return Math.random();
}
得到一個兩數(shù)之間的隨機數(shù)
這個例子返回了一個在指定值之間的隨機數(shù)诊赊。這個值比min
大(可能與min
相等), 以及比max
小(但是不等于max
).
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
得到一個兩數(shù)之間的隨機整數(shù)
這個例子返回了一個在指定值之間的隨機整數(shù)厚满。這個值比min
大(如果min
不是整數(shù),那么下一個整數(shù)大于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
}
得到一個兩數(shù)之間的隨機整數(shù)碧磅,包括兩個數(shù)在內(nèi)
當getRandomInt()
函數(shù)在最小值之上碘箍,它將排除最大值. 如果你需要結(jié)果包含最小值和最大值,怎么辦呢? getRandomIntInclusive()
函數(shù)將能完成.
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() 函數(shù)返回一個數(shù)字四舍五入后最接近的整數(shù)
描述:如果參數(shù)的小數(shù)部分大于0.5丰榴,則舍入到下一個絕對值更大的整數(shù)。如果參數(shù)的小數(shù)部分小于0.5秆撮,則舍入到下一個絕對值更小的整數(shù)四濒。如果參數(shù)的小數(shù)部分恰好等于0.5,見分曉舍入到下一個在正無窮方向中的整數(shù)职辨。注意:與很多其他評議中的round()
函數(shù)不同盗蟆,Math.round()
并不總是舍入到遠離0的方向(尤其是在負數(shù)的小數(shù)部分愉好等于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() 函數(shù)返回一個數(shù)字的符號, 指示數(shù)字是正數(shù)舒裤,負數(shù)還是零
描述:
- 此函數(shù)共有5種返回值, 分別是 1, -1, 0, -0, NaN. 代表的各是正數(shù), 負數(shù), 正零, 負零, NaN喳资。
- 傳入該函數(shù)的參數(shù)會被隱式轉(zhuǎn)換成數(shù)字類型。
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() 函數(shù)返回一個數(shù)值的正弦值
sin
方法返回一個 -1
到 1
之間的數(shù)值骨饿,表示給定角度(單位:弧度)的正弦值。
Math.sin(0); // 0
Math.sin(1); // 0.8414709848078965
Math.sin(Math.PI / 2); // 1
28台腥、 Math.sinh() 函數(shù)返回一個數(shù)字(單位為角度)的雙曲正弦值
Math.sinh(0) // 0
Math.sinh(1) // 1.1752011936438014
Math.sinh("-1") // -1.1752011936438014
Math.sinh("foo") // NaN
雙曲正弦的圖像如下:
29宏赘、Math.sqrt() 函數(shù)返回一個數(shù)的平方根
如果參數(shù)
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() 方法返回一個數(shù)值的正切值
tan
方法返回一個數(shù)值黎侈,表示一個角的正切值察署。
下面的函數(shù)返回變量 x 的正切值:
function getTan(x) {
return Math.tan(x);
}
由于 Math.tan() 函數(shù)接受弧度數(shù)值,但是通常使用度更方便峻汉,下面的函數(shù)可以接受以度為單位的數(shù)值贴汪,將其轉(zhuǎn)為弧度脐往,然后返回其正切值。
function getTanDeg(deg) {
var rad = deg * Math.PI/180;
return Math.tan(rad);
}
30扳埂、Math.tanh() 函數(shù)將會返回一個數(shù)的雙曲正切函數(shù)值
Math.tanh(0); // 0
Math.tanh(Infinity); // 1
Math.tanh(1); // 0.7615941559557649
多種實現(xiàn)方式
tanh()可以通過Math.exp()函數(shù)來構(gòu)擬:
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));
}
}
或者只調(diào)用一次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() 方法會將數(shù)字的小數(shù)部分去掉,只保留整數(shù)部分
傳入該方法的參數(shù)會被隱式轉(zhuǎn)換成數(shù)字類型
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