ES6+ Number 对象的方法
1. 前言
本节主要讲解 Number 对象下剩余的方法,Number 对象把之前在全局上的方法移植了过来,并对有缺陷的方法进行了补充和修复,上节我们已经学习了全局下的 isFinite()
和 isNaN()
两种方法存在类型转换,对于判断数值来说存在歧义。下面我们来看看,ES6 中移植的没有变的函数和新增的一些函数。
2. Number.parseInt()&Number.parseFloat()
为了保持方法上的统一,把全局下的 parseInt()
和 parseFloat()
移植到 ES6 的 Number 对象上。
ES6 的 Number 对象上提供的 Number.isFinite () 和 Number.isNaN () 两个函数是相同的,如何证明 Number 下的这两个方法只是移植全局的呢?可以利用 ===
运算符来判断,如下实例:
Number.parseInt === parseInt; // true
Number.parseFloat === parseFloat; // true
// ES5的写法
parseInt('12.34') // 12
parseFloat('123.45#') // 123.45
// ES6的写法
Number.parseInt('12.34') // 12
Number.parseFloat('123.45#') // 123.45
3. Number.isInteger()
3.1 判断一个值为整数
function isInteger(value) {
return typeof value === 'number' && value% === ;
}
isInteger() // true
isInteger() // false
isInteger('') // false
isInteger('8') // false
isInteger(true) // false
isInteger([]) // false
另一种方法是:使用 Math.round
、Math.ceil
、Math.floor
判断,因为整数取整后还是等于自己。利用这个特性来判断是否是整数,使用 Math.floor
示例,如下:
function isInteger(value) {
return Math.floor(value) === value;
}
isInteger() // true
isInteger() // false
isInteger('') // false
isInteger('8') // false
isInteger(true) // false
isInteger([]) // false
上面的两种方法算是比较常用的判断方式,其他的一些方式都存在一些问题,这里就不一一列举了。但是,这两种方法都不够简洁,ES6 把判断整数提升到了语言层面,下面我们来看下 Number.isInteger()
的使用。
3.2 Number.isInteger () 的用法
Number.isInteger()
是 ES6 新增的函数,用来判断给定的参数是否为整数。
Number.isInteger() // true
Number.isInteger() // false
如果被检测的值是整数,则返回 true
,否则返回 false
。注意 NaN
和正负 Infinity
不是整数。
Number.isInteger(); // true
Number.isInteger(); // true
Number.isInteger(-); // true
Number.isInteger(); // false
Number.isInteger(Math.PI); // false
Number.isInteger(); // false
Number.isInteger(-); // false
Number.isInteger("100"); // false
Number.isInteger(true); // false
Number.isInteger(false); // false
Number.isInteger([]); // false
4. Number.isSafeInteger()
Number.isSafeInteger()
是 ES6 新增的函数,用来判断传入的参数值是否是一个 “安全整数”(safe integer)在数值扩展的 小节 我们介绍了最大安全整数和最小安全整数,不记得的同学可以跳过去看看。
- 可以准确地表示为一个 IEEE-754 双精度数字;
- 其 IEEE-754 表示不能是舍入任何其他整数以适应 IEEE-754 表示的结果。
比如,2e53 - 1
是一个安全整数,它能被精确表示,在任何 IEEE-754 舍入模式(rounding mode)下,没有其他整数舍入结果为该整数。作为对比,2e53
就不是一个安全整数,它能够使用 IEEE-754 表示,但是 2e53 + 1
不能使用 IEEE-754 直接表示,在就近舍入(round-to-nearest)和向零舍入中,会被舍入为 2e53
。
安全整数范围为 -(2e53 - 1)到
2e53 - 1
之间的整数,包含 -(2e53 - 1)和
2e53 - 1
。
Number.isSafeInteger(); // true
Number.isSafeInteger(Math.pow(, )) // false
Number.isSafeInteger(Math.pow(, ) - ) // true
Number.isSafeInteger(); // false
Number.isSafeInteger(); // false
Number.isSafeInteger("3"); // false
Number.isSafeInteger(); // false
Number.isSafeInteger(); // true