好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

ES6+ Number 对象的方法

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 
 

上面的 代码 返回的结果都为 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 对象上,为了逐步减少全局性 方法 ,使语言逐步模块化。

3. Number.isInteger()

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

3.1 判断 一个 值为整数

一种 方法 是:任何整数都会被 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.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 
 

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

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 
 

5. 小结

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

查看更多关于ES6+ Number 对象的方法的详细内容...

  阅读:49次

上一篇

下一篇

第1节:ES6+ 简介    第2节:ES6 环境配置    第3节:ES6+ let    第4节:ES6+ const    第5节:ES6+ 展开语法    第6节:ES6+ 剩余参数    第7节:ES6+ 解构赋值    第8节:ES6+ 模版字符串    第9节:ES6+ 箭头函数    第10节:ES6+ 数值扩展    第11节:ES6+ isFinite()&isNaN()    第12节:ES6+ Number 对象的方法    第13节:ES6+ Math 对象的扩展    第14节:ES6+ includes()    第15节:ES6+ 字符串的扩展    第16节:ES6+ startsWith()    第17节:ES6+ endsWith()    第18节:ES6+ repeat()    第19节:ES6+ padStart()    第20节:ES6+ padEnd()    第21节:ES6+ trim()    第22节:ES6+ Array.from()    第23节:ES6+ of()    第24节:ES6+ find()和findIndex()    第25节:ES6+ copyWithin()    第26节:ES6+ fill()    第27节:ES6+ isArray()    第28节:ES6+ 对象的扩展    第29节:ES6+ flat()    第30节:ES6+ 可选链操作符    第31节:ES6+ Object.is()    第32节:ES6+ Object.assign()    第33节:ES6+ Object.keys()    第34节:ES6+ Object.values()    第35节:ES6+ Object.entries()    第36节:ES6+ 数据结构扩展    第37节:ES6+ Set    第38节:ES6+ WeakSet    第39节:ES6+ Map    第40节:ES6+ WeakMap    第41节:ES6+ Symbol    第42节:ES6+ for...of    第43节:ES6+ 迭代协议    第44节:ES6+ 实现一个简版的 Promise    第45节:ES6+ Promise 基础    第46节:ES6+ Promise 进阶    第47节:ES6+ Generator 基础    第48节:ES6+ Generator 函数应用    第49节:ES6+ async/await    第50节:ES6+ Class 前置知识    第51节:ES6+ Class    第52节:ES6+ Proxy    第53节:ES6+ Reflect(一)    第54节:ES6+ Reflect(二)    第55节:ES6+ 模块化(一)    第56节:ES6+ 模块化(二)    第57节:ES6实战1-实现Vue3 reactive 源码    第58节:ES6实战2-实现 Vue3 effect 源码    第59节:ES6 实战2-封装请求    第60节:ES6+ 实战3-代码整洁之道    第61节:ES6 Map原理分析    第62节:ES6module语法加载importexport    第63节:ES6的循环与可迭代对象示例详解