Math.trunc()
Math.trunc
方法用于去除一个数的小数部分,返回整数部分。
对于没有部署这个方法的环境,可以用下面的代码模拟。
1
2
3
|
Math.trunc = Math.trunc ||
function
(x) {
return
x < 0 ? Math.ceil(x) : Math.floor(x);
};
|
Math.sign()
Math.sign
方法用来判断一个数到底是正数、负数、还是零。
对于没有部署这个方法的环境,可以用下面的代码模拟。
1
2
3
4
5
6
7
|
Math.sign = Math.sign ||
function
(x) {
x = +x;
// convert to a number
if
(x === 0 || isNaN(x)) {
return
x;
}
return
x > 0 ? 1 : -1;
};
|
Math.cbrt()
Math.cbrt
方法用于计算一个数的立方根。
对于没有部署这个方法的环境,可以用下面的代码模拟。
1
2
3
4
|
Math.cbrt = Math.cbrt ||
function
(x) {
var
y = Math.pow(Math.abs(x), 1/3);
return
x < 0 ? -y : y;
};
|
Math.clz32()
JavaScript的整数使用32位二进制形式表示,Math.clz32
方法返回一个数的32位无符号整数形式有多少个前导0。
Math.imul()
Math.imul
方法返回两个数以32位带符号整数形式相乘的结果,返回的也是一个32位的带符号整数。
Math.fround() § ⇧
Math.fround方法返回一个数的单精度浮点数形式。
对于没有部署这个方法的环境,可以用下面的代码模拟。
1
2
3
|
Math.fround = Math.fround ||
function
(x) {
return
new
Float32Array([x])[0];
};
|
Math.hypot()
Math.hypot
方法返回所有参数的平方和的平方根
对数方法
ES6新增了4个对数相关方法。
(1) Math.expm1()
Math.expm1(x)
返回ex - 1,即Math.exp(x) - 1
。
对于没有部署这个方法的环境,可以用下面的代码模拟。
1
2
3
|
Math.expm1 = Math.expm1 ||
function
(x) {
return
Math.exp(x) - 1;
};
|
(2)Math.log1p()
Math.log1p(x)
方法返回1 + x
的自然对数,即Math.log(1 + x)
。如果x
小于-1,返回NaN
。
对于没有部署这个方法的环境,可以用下面的代码模拟。
1
2
3
|
Math.log1p = Math.log1p ||
function
(x) {
return
Math.log(1 + x);
};
|
(3)Math.log10()
Math.log10(x)
返回以10为底的x
的对数。如果x
小于0,则返回NaN。
对于没有部署这个方法的环境,可以用下面的代码模拟。
1
2
3
|
Math.log10 = Math.log10 ||
function
(x) {
return
Math.log(x) / Math.LN10;
};
|
(4)Math.log2()
Math.log2(x)
返回以2为底的x
的对数。如果x
小于0,则返回NaN。
对于没有部署这个方法的环境,可以用下面的代码模拟。
1
2
3
|
Math.log2 = Math.log2 ||
function
(x) {
return
Math.log(x) / Math.LN2;
};
|
三角函数方法
ES6新增了6个三角函数方法。
1
2
3
4
5
6
|
Math.sinh(x) 返回x的双曲正弦(hyperbolic sine)
Math.cosh(x) 返回x的双曲余弦(hyperbolic cosine)
Math.tanh(x) 返回x的双曲正切(hyperbolic tangent)
Math.asinh(x) 返回x的反双曲正弦(inverse hyperbolic sine)
Math.acosh(x) 返回x的反双曲余弦(inverse hyperbolic cosine)
Math.atanh(x) 返回x的反双曲正切(inverse hyperbolic tangent)
|
Math.signbit()
Math.sign()
用来判断一个值的正负,但是如果参数是-0
,它会返回-0
。
ES2016 新增了一个指数运算符(**
)
指数运算符可以与等号结合,形成一个新的赋值运算符(**=
)。
1
2
3
4
5
6
7
|
let
a = 2;
a **= 2;
// 等同于 a = a * a;
let
b = 3;
b **= 3;
// 等同于 b = b * b * b;
|
注:在vp8引擎中与Math.pow()结果有些不同。