一、ES6对Number对象新增了isInteger函数、极小常量Number.EPSILON、安全整数;

二、window对象下的4个函数移植到了Number对象下;三、Math对象扩展了17个新函数

今天来学习一下es6中数值的扩展。在学习之前,我们先来回顾一下数值中旧的规范和使用方式(es5):

传统的写法(es5中

全局函数:isNaN函数,isFinite函数,parseInt函数,parseFloat函数等

例如(isNaN函数):

以上两种写法均可,isNaN是全局函数,本身就是属于window对象下的一个方法,所以大部分人会使用第一种写法。

但是在ES6的标准中,isNaN方法被移植到了Number对象上,也就是原本属于全局对象window下的函数,现在属于Number对象上了,同样被处理的函数还有isFinite函数,parseInt函数,parseFloat函数。

被移植后的函数使用方式是这样的:

在使用之前必须指明它是Number对象下的函数,否则会被默认为window下的函数。

新的写法(es6)

1、新特性:Number.isNaN函数--用于判断传入的是否是非数值

  • 新的写法与旧的写法有什么区别呢?

传统的isNaN函数会把非数值的参数转化成数值再进行判断,而Number. isNaN只对数值类型有效,非数值类型的参数一律返回false。

  • 所以我们在使用这个函数到时候还要小心,当返回false的时候,不一定就是一个数值,有可能是一个非数值类型的参数。

2、新特性:Number.isFinite函数--用来检查一个数值是否非无穷

  • Infinity是window对象下的一个常量,表示一个无穷数;
  • isFinite函数跟isNaN函数一样,也只是对数值类型有效,对非数值类型的参数一律返回false。

3、新特性:Number.parseInt函数--解析一个字元串,返回一个整数

(parseInt函数同样是从window对象下移植到Number对象下,但是它的作用没有任何变化。)

4、新特性:Number.parseFloat函数--解析一个字元串,并返回一个浮点数

  • 以上4个函数都是在window对象下,移植到了Number对象下,你可能会跟我一样好奇:好端端地为什么好移植到其他地方去,这样做的目的是什么?

其实这么做的目的是慢慢地减少全局性的函数,把全局函数合理地规划到其他对象下,渐渐实现语言的模块化。

5、新特性:Number.isInteger函数--用来判断是否是整数。

在javascript内部对整数和浮点数采用一样的存储方式,因此小数点后如果都是0的浮点数,都会被认为是整数:

6、极小常量(Number.EPSILON)--常量:定义一个极小的数值

  • 干嘛要定义一个这样的数值,在什么情况下会用它呢?

Number.EPSILON的出现是用来判断浮点数的计算误差,如果浮点数计算得到的误差不超过Number.EPSILON的值,就表示可以接受这样的误差。

7、安全整数(Number.isSafeInteger)

JavaScript能够准确表示的整数范围在-2^53到2^53之间,超过这个范围,无法精确表示这个值。故称之为不安全。

  • ES6定义了两个常量来表示这个范围的最大值和最小值:Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER。此外,如果给你一个数值,你不知道它是否超出了这个安全范围,你可以使用ES6给我们新增的一个函数Number.isSafeInteger来进行判断.

ES6给数值带来的扩展,除了对Number对象进行了扩展,还对Math对象进行了扩展。ES6给Math对象新增了17个函数,接下来简单介绍几个相关扩展:

es5:

Math.random();

//结果:随机数0.8897368770341108

es6:

1、新特性:Math.trunc函数--用于去除一个数的小数部分,返回整数部分。

2、新特性:Math.sign函数--用来判断一个数到底是正数、负数、还是零。

3、新特性:Math.cbrt函数--用于计算一个数的立方根。

除了这三个函数以外,剩下的新增函数都是一些高中时期的数学方法,只不过是ES6将他们的运算封装成一个方法,方便大家使用,也算是开发者的福音。

它们分别是:

Math.acosh(x) 返回 x 的反双曲余弦。

Math.asinh(x) 返回 x 的反双曲正弦。

Math.atanh(x) 返回 x 的反双曲正切。

Math.clz32(x) 返回 x 的 32 位二进位整数表示形式的前导 0 的个数。

Math.sinh(x) 返回x的双曲正弦。

Math.cosh(x) 返回 x 的双曲余弦。

Math.expm1(x) 返回 e?x - 1。

Math.fround(x) 返回 x 的单精度浮点数形式。

Math.hypot(...values) 返回所有参数的平方和的平方根。

Math.imul(x, y) 返回两个参数以 32 位整数形式相乘的结果。

Math.log1p(x) 返回 1 + x 的自然对数。

Math.log10(x) 返回以 10 为底的x的对数。

Math.log2(x) 返回以 2 为底的 x 的对数。

Math.tanh(x) 返回 x 的双曲正切。

这么多数学方法,估计很多人都会懵逼,根本记不住这么多,但是没关系,我们也不需要去死记硬背它们,我们只需要记住ES6为Math对象扩展了很多数学方法就可以了。等真正使用到的时候,我们再去查找资料就可以啦。

总结:ES6对Number对象新增了isInteger函数、极小常量Number.EPSILON、安全整数;还将window对象下的4个函数移植到了Number对象下;此外,对Math对象扩展了17个新函数

推荐阅读:

相关文章