1、ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示。
如果要将0b和0o前缀的字符串数值转为十进制,要使用Number方法。
Number('0b111') // 7
Number('0o10') // 8
2、Number.isFinite()用来检查一个数值是否为有限的(finite)。
Number.isNaN()用来检查一个值是否为NaN。
它们与传统的全局方法isFinite()和isNaN()的区别在于,传统方法先调用Number()将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效,Number.isFinite()对于非数值一律返回false, Number.isNaN()只有对于NaN才返回true,非NaN一律返回false。
3、Number.parseInt(), Number.parseFloat()
ES6将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为完全保持不变。
这样做的目的,是逐步减少全局性方法,使得语言逐步模块化。
// ES5的写法
parseInt('12.34') // 12
parseFloat('123.45#') // 123.45
// ES6的写法
Number.parseInt('12.34') // 12
Number.parseFloat('123.45#') // 123.45
Number.parseInt === parseInt // true
Number.parseFloat === parseFloat // true
4、Number.isInteger()用来判断一个值是否为整数。需要注意的是,在JavaScript内部,整数和浮点数是同样的储存方法,所以3和3.0被视为同一个值。
5、但是如果这个误差能够小于Number.EPSILON,我们就可以认为得到了正确结果。
5.551115123125783e-17 < Number.EPSILON
// true
6、JavaScript能够准确表示的整数范围在-2^53到2^53之间(不含两个端点),超过这个范围,无法精确表示这个值。
ES6引入了Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER这两个常量,用来表示这个范围的上下限。
Number.isSafeInteger()则是用来判断一个整数是否落在这个范围之内。
Math 的扩展
(1)、Math.trunc()
Math.trunc方法用于去除一个数的小数部分,返回整数部分。
(2)、Math.sign()
Math.sign方法用来判断一个数到底是正数、负数、还是零。
它会返回五种值。
参数为正数,返回+1; 参数为负数,返回-1; 参数为0,返回0; 参数为-0,返回-0; 其他值,返回NaN。 (3)、Math.cbrt()
Math.cbrt方法用于计算一个数的立方根。
(4)、Math.clz32()
JavaScript的整数使用32位二进制形式表示,Math.clz32方法返回一个数的32位无符号整数形式有多少个前导0。
对于小数,Math.clz32方法只考虑整数部分。
(5)、Math.imul()
Math.imul方法返回两个数以32位带符号整数形式相乘的结果,返回的也是一个32位的带符号整数。
(6)、Math.fround()
Math.fround方法返回一个数的单精度浮点数形式。
对于整数来说,Math.fround方法返回结果不会有任何不同,区别主要是那些无法用64个二进制位精确表示的小数。这时,Math.fround方法会返回最接近这个小数的单精度浮点数。
(7)、Math.hypot()
Math.hypot方法返回所有参数的平方和的平方根。
对数方法
(1) Math.expm1()
Math.expm1(x)返回ex - 1,即Math.exp(x) - 1。
(2)、Math.log1p()
Math.log1p(x)方法返回1 + x的自然对数,即Math.log(1 + x)。如果x小于-1,返回NaN。
(3)、Math.log10()
Math.log10(x)返回以10为底的x的对数。如果x小于0,则返回NaN。
(4)、Math.log2()
Math.log2(x)返回以2为底的x的对数。如果x小于0,则返回NaN。
8、Math.signbit()方法判断一个数的符号位是否设置了。
如果参数是NaN,返回false 如果参数是-0,返回true 如果参数是负值,返回true 其他情况返回false
9、ES2016 新增了一个指数运算符(**)。
指数运算符可以与等号结合,形成一个新的赋值运算符(**=)。
let a = 1.5;
a **= 2;
// 等同于 a = a * a;
let b = 4;
b **= 3;
// 等同于 b = b * b * b;