ES6之数值Number新特性

Number.isNaN 函数

传统的isNaN函数会把非数值的参数转化成数值再进行判断,而Number.
isNaN只对数值类型有效,非数值类型的参数一律返回false。当返回false的时候,不一定就是一个数值,有可能是一个非数值类型的参数。

isNaN('abc');//结果:true
//'abc'无法转为一个数值,返回true

Number.isNaN('abc'); //结果:false
//'abc'是字符串,Number.isNaN不做类型转换,直接返回false

Number.isFinite 函数

Number.isFinite函数:用来检查一个数值是否非无穷。注意第二行代码的参数:Infinity,Infinity是window对象下的一个常量,表示一个无穷数。所以第二行代码会返回false。此外,isFinite函数跟isNaN函数一样,也只是对数值类型有效,对非数值类型的参数一律返回false。

Number.isFinite(1);
//结果:true,数值1是有穷,即非无穷

Number.isFinite(Infinity);
//结果:false,Infinity表示无穷大的特殊值

Number.isFinite('abc'); //结果:false

Number.parseInt 函数

parseInt函数:解析一个字符串,返回一个整数。parseInt函数同样是从window对象下移植到Number对象下,但是它的作用没有任何变化。

//传统用法:
parseInt('12.3abc');  
//结果:返回数值12

//ES6用法:
Number.parseInt('12.3abc');
//结果:返回数值12

Number.parseFloat 函数

parseFloat函数:解析一个字符串,并返回一个浮点数。跟parseInt一样,被移植到Number对象下,作用保持不变。

//传统用法:
parseInt('12.3abc');
//结果:返回数值12

//ES6用法:
Number.parseInt('12.3abc');
//结果:返回数值12

以上4个函数都是在window对象下,移植到了Number对象下,这么做的目的是慢慢地减少全局性的函数,把全局函数合理地规划到其他对象下,渐渐实现语言的模块化。


Number.isInteger 函数

Number.isInteger函数:用来判断是否是整数。
在javascript内部对整数和浮点数采用一样的存储方式,因此小数点后如果都是0的浮点数,都会被认为是整数。
数值3.0和3.00都会被认为是整数。

Number.isInteger(3.2);
//结果:false

Number.isInteger(3);
//结果:true

Number.isInteger(3.0);
//结果:true

Number.isInteger(3.00);
//结果:true

Math.trunc 函数

Math.trunc函数:用于去除一个数的小数部分,返回整数部分。

Math.trunc(3);
//结果:3

Math.trunc(3.1);
//结果:3

Math.sign 函数

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

Math.sign(3);
//结果:1

Math.sign(-3);
//结果:-1

Math.sign(0);
//结果:0

Math.sign('abc');
//结果:NaN

Math.cbrt 函数

Math.cbrt函数:用于计算一个数的立方根。

Math.cbrt(8);
//结果:2

Math.cbrt(27);
//结果:3

除了这三个函数以外,剩下的新增函数都是一些高中时期的数学方法,只不过是ES6将他们的运算封装成一个方法,方便大家使用,也算是开发者的福音。
它们分别是:
Math.acosh(x) 返回 x 的反双曲余弦。
Math.asinh(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对象扩展了很多数学方法就可以了。等真正使用到的时候,我们再去查找资料就可以了。


极小常量

Number.EPSILON常量:定义一个极小的数值。
2.220446049250313e-16是一个极小的数值,约等于0.00000000000000022204。干嘛要定义一个这样的数值,在什么情况下会用它呢?Number.EPSILON的出现是用来判断浮点数的计算误差,如果浮点数计算得到的误差不超过Number.EPSILON的值,就表示可以接受这样的误差。

console.log(Number.EPSILON);
//结果:2.220446049250313e-16

安全整数

ES6为我们引入了安全整数的概念。JavaScript能够准确表示的整数范围在-253到253之间,超过这个范围,无法精确表示这个值。故称之为不安全。
为此,ES6定义了两个常量来表示这个范围的最大值和最小值:Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER。此外,如果给你一个数值,你不知道它是否超出了这个安全范围,你可以使用ES6给我们新增的一个函数Number.isSafeInteger来进行判断。看例子:

Number.isSafeInteger(Number.MAX_SAFE_INTEGER);
//结果:true

Number.isSafeInteger(Number.MAX_SAFE_INTEGER+1);
//结果:false

我们用最大安全整数Number.MAX_SAFE_INTEGER来做试验,第一行代码的结果返回的值是true,也就表示Number.MAX_SAFE_INTEGER属于安全范围,第二行代码,我们对Number.MAX_SAFE_INTEGER进行了+1,相加后的数值超过安全范围,isSafeInteger函数就返回了false,表示不在安全范围内。

posted @ 2022-07-20 18:17  猫老板的豆  阅读(87)  评论(0编辑  收藏  举报