原文链接http://es6.ruanyifeng.com/#docs/number
这一章都是各种数值运算和新的Math的api
;在新的ES6上新的api都绑定到了Number
二进制和八进制表示法
ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示。
0b111110111 === 503 // true
0o767 === 503 // true
如果要将0b和0o前缀的字符串数值转为十进制,要使用Number方法。
Number('0b111') // 7
Number('0o10') // 8
Number.isFinite(), Number.isNaN()
它们与传统的全局方法
isFinite()
和isNaN()
的区别在于,传统方法先调用Number()
将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效,Number.isFinite()
对于非数值一律返回false,Number.isNaN()
只有对于NaN才返回true,非NaN一律返回false。
Number.isFinite()
用来检查一个数值是否为有限的(finite),即不是Infinity。
注意,如果参数类型不是数值,Number.isFinite
一律返回false。
Number.isNaN()
用来检查一个值是否为NaN。
如果参数类型不是NaN,Number.isNaN
一律返回false。
Number.parseInt(), Number.parseFloat()
ES6 将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为完全保持不变。
// ES6的写法
Number.parseInt('12.34') // 12
Number.parseFloat('123.45#') // 123.45
Number.parseInt === parseInt // true
Number.parseFloat === parseFloat // true
这样做的目的,是逐步减少全局性方法,使得语言逐步模块化。
Number.isInteger()
Number.isInteger()
用来判断一个数值是否为整数。
Number.isInteger(5E-324) // false
Number.isInteger(5E-325) // true
上面代码中,5E-325由于值太小,会被自动转为0,因此返回true。
总之,如果对数据精度的要求较高,不建议使用Number.isInteger()判断一个数值是否为整数。
Number.EPSILON
其表示 1 与大于 1 的最小浮点数之间的差。
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
Math.trunc(true) //1
Math.trunc(false) // 0
Math.trunc(null) // 0
//对于空值和无法截取整数的值,返回NaN。
Math.trunc(NaN); // NaN
Math.trunc('foo'); // NaN
Math.trunc(); // NaN
Math.trunc(undefined) // NaN
指数运算符
ES2016 新增了一个指数运算符(**)
。
2 ** 2 // 4
2 ** 3 // 8
let a = 1.5;
a **= 2;
// 等同于 a = a * a;
let b = 4;
b **= 3;
// 等同于 b = b * b * b;
参考链接阮一峰:http://es6.ruanyifeng.com/