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,表示不在安全范围内。