您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

ES6+ Number 对象的方法

本节主要讲解 Number 对象下剩余的,Number 对象把之前在全局上的移植了过来,并对有缺陷的进行了补充和修复,上节我们已经学习了全局下的 isFinite()isNaN() 两种存在类型转换,对于判断数值来说存在歧义。下面我们来看看,ES6 中移植的没有变的和新增的一些。

为了保持上的统一,把全局下的 parseInt()parseFloat() 移植到 ES6 的 Number 对象上。

ES6 的 Number 对象上提供的 Number.isFinite () 和 Number.isNaN () 两个是相同的,如何证明 Number 下的这两个只是移植全局的呢?可以利用 === 运算符来判断,如下实例:

Number.parseInt === parseInt;				// true
Number.parseFloat === parseFloat;		// true

上面的返回的结果都为 ture 说明此两种和全局是一样的,没有发生变化。具体的使用可以参考 ES5 中的 parseInt()parseFloat()

// ES5的写法
parseInt('12.34') 						// 12
parseFloat('123.45#') 				// 123.45

// ES6的写法
Number.parseInt('12.34') 			// 12
Number.parseFloat('123.45#')  // 123.45

将这两个全局移植到 Number 对象上,为了逐步减少全局性,使语言逐步模块化。

在学习这个之前,我们先来回顾一下,我们是怎么判断值为整数的?

一种是:任何整数都会被 1 整除,即余数是 0。利用这个规则来判断是否是整数。就有如下:

function isInteger(value) {
	return typeof value === 'number' && value% === ;
}
isInteger() 		// true
isInteger() 	// false
isInteger('') 	// false
isInteger('8') 	// false
isInteger(true) // false
isInteger([]) 	// false

另一种是:使用 Math.roundMath.ceilMath.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() 的使用。

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

上面的基本涵盖了 JavaScript 中的值的判断,在一些 ES6 语法的浏览器中可以使用上面的两种方式进行 Polyfill 处理。

Number.isSafeInteger() 是 ES6 新增的,用来判断传入的参数值是否是 “安全整数”(safe integer)在数值扩展的 我们介绍了最大安全整数和最小安全整数,不记得的同学可以跳过去看看。

安全整数是符合下面条件的整数:

比如,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

本节学习了 Number 对象下的,讲解了为什么把全局的移植到 Number 对象下,以及对比没有 ES6 时是怎么判断数值为整数的情况,通过对 Number 对象下的的学习,可以看到 ES6 在收敛全局的,使语言逐步模块化,更加符合语言的规范。


联系我
置顶