1. 二进制和八进制表示法
ES6提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示。
0b111110111 === 503 // true
0o767 === 503 // true
复制代码
2. Number.isFinite(), Number.isNaN()
Number.isFinite()判断数值是不是有限的,
Number.isNaN()判断是否是NaN
而这两个新方法只对数值有效,非数值一律返回false。
3. Number.parseInt(), Number.parseFloat()
ES6将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为完全保持不变。
// ES6的写法
Number.parseInt('12.34') // 12
Number.parseFloat('123.45#') // 123.45
复制代码
4. Number.isInteger()
Number.isInteger()用来判断一个值是否为整数。需要注意的是,在JavaScript内部,整数和浮点数是同样的储存方法,所以3和3.0被视为同一个值。
Number.isInteger(25) // true
Number.isInteger(25.0) // true
Number.isInteger(25.1) // false
Number.isInteger("15") // false
Number.isInteger(true) // false
复制代码
5. Number.EPSILON
Number.EPSILON
// 2.220446049250313e-16
复制代码
Number.EPSILON可以用来描述一个可以接受的误差范围。
function withinErrorMargin (left, right) {
return Math.abs(left - right) < Number.EPSILON;
}
withinErrorMargin(0.1 + 0.2, 0.3)
// true
withinErrorMargin(0.2 + 0.2, 0.3)
// false
复制代码
6. Math.trunc()
Math.trunc()方法用于去除一个数的小数部分,返回整数部分
Math.trunc(4.1) // 4
Math.trunc(4.9) // 4
Math.trunc(-4.1) // -4
Math.trunc(-4.9) // -4
Math.trunc(-0.1234) // -0
复制代码
对于非数值,Math.trunc内部使用Number方法将其先转为数值
Math.trunc('123.456')
// 123
复制代码
对于空值和无法截取整数的值,返回NaN。
Math.trunc(NaN); // NaN
Math.trunc('foo'); // NaN
Math.trunc(); // NaN
复制代码
7. Math.sign()
Math.sign方法用来判断一个数到底是正数、负数、还是零。
参数为正数,返回+1;
参数为负数,返回-1;
参数为0,返回0;
参数为-0,返回-0;
其他值,返回NaN。
Math.sign(-5) // -1
Math.sign(5) // +1
Math.sign(0) // +0
Math.sign(-0) // -0
Math.sign(NaN) // NaN
Math.sign('foo'); // NaN
Math.sign(); // NaN
复制代码
8. Math.cbrt()
求立方根,参数不是数字转为数字,非法参数返回NaN
Math.cbrt('8') // 2
Math.cbrt('hello') // NaN
复制代码
9. Math.clz32()
JavaScript的整数使用32位二进制形式表示,Math.clz32方法返回一个数的32位无符号整数形式有多少个前导0。
Math.clz32(0) // 32
Math.clz32(1) // 31
Math.clz32(1000) // 22
复制代码
10. Math.imul()
Math.imul方法返回两个数以32位带符号整数形式相乘的结果,返回的也是一个32位的带符号整数。
Math.imul(2, 4) // 8
Math.imul(-1, 8) // -8
Math.imul(-2, -2) // 4
复制代码
如果只考虑最后32位,大多数情况下,Math.imul(a, b)与a * b的结果是相同的,即该方法等同于(a * b)|0的效果(超过32位的部分溢出)。之所以需要部署这个方法,是因为JavaScript有精度限制,超过2的53次方的值无法精确表示。Math.imul方法可以返回正确的低位数值。
11. Math.fround()
Math.fround方法返回一个数的单精度浮点数形式。
Math.fround(0) // 0
Math.fround(1) // 1
Math.fround(1.337) // 1.3370000123977661
Math.fround(1.5) // 1.5
Math.fround(NaN) // NaN
复制代码
12. Math.hypot()
Math.hypot方法返回所有参数的平方和的平方根。
Math.hypot(3, 4); // 5
复制代码
13. 对数
//这里的=指数学的=
Math.expm1(x) = Math.exp(x) - 1 = ex - 1
Math.log1p(x) = Math.log(1 + x) = ln(1 + x)
//这里自带的Math.log(x)是自然对数lnx,对于其他底的对数,采用换底公式计算 logax = lnx / lna
Math.log10(x) = lgx
Math.log2(x) = log2x
14. 双曲函数
Math.sinh(x)
Math.cosh(x)
Math.tanh(x)
Math.asinh(x)
Math.acosh(x)
Math.atanh(x)
双曲函数有以下性质,和圆函数很相似
cosh2x - sinh2x = 1
tanhx * cothx = 1
sinh(x+y) = sinhxcoshy + coshxsinhy
cosh(x+y) = coshxcoshy + sinhxsinhy
......
15. 指数运算符
ES7新增了一个指数运算符(**),目前Babel转码器已经支持。
2 ** 2 // 4
2 ** 3 // 8
复制代码
指数运算符可以与等号结合,形成一个新的赋值运算符(**=)。
let a = 2;
a **= 2;
// 等同于 a = a * a;
复制代码