新特性:Number.isNaN函数
用于判断传入的是否是非数值,注意:是判断非数值,而不是判断数值,IsNaN的全称是: is not a number。
Number.isNaN(2.5); //结果:false
由于2.5是一个number类型的数值,所以返回false(再次注意:判断是非数值,所以是false,表示2.5是一个数值类型的值)。
那么,移植到Number对象isNaN函数和原本是全局函数的isNaN函数,有不一样的地方吗,还是仅仅简单地移植过来就完事了?
答案:有区别。
传统的isNaN函数会把非数值的参数转化成数值再进行判断,而Number. isNaN只对数值类型有效,非数值类型的参数一律返回false。看文字解释不过瘾,咱们看案例。
isNaN('abc');//结果:true
//'abc'无法转为一个数值,返回true
Number.isNaN('abc'); //结果:false
//'abc'是字符串,Number.isNaN不做类型转换,直接返回false
正如上面我写的注释一样,Number下面的isNaN都懒得给字符串’abc’做类型转换,直接返回false。而ES5中的isNaN函数会对字符串’abc’进行类型转换后,发现它是一个 NaN(非数值),才返回true。
所以我们在使用这个函数到时候还要小心,当返回false的时候,不一定就是一个数值,有可能是一个非数值类型的参数。
新特性:Number.isFinite函数
用来检查一个数值是否非无穷。注意是判断非无穷,不是判断无穷
Number.isFinite(10)//true
Number.inFinite(Infinity)//false Infinity是表示无穷大的特殊值
isFinite函数跟isNaN函数一样,也只是对数值类型有效,对非数值类型的参数一律返回false。
Number.isFinite("abc")//false
所以同样要注意,当Number.isFinite函数返回false的时候,参数不一定就是一个有穷的数值类型,
也有可能是一个非数值类型的参数。如:字符串’abc’。
新特性:Number.parseInt函数
解析一个字符串,返回一个整数。parseInt函数同样是从window对象下移植到Number对象下,
但是它的作用没有任何变化
parseInt('1.23asd'); //1
Number.parseInt('1.23asd')//1
新特性:Number.parseFloat函数
解析一个字符串,并返回一个浮点数。跟parseInt一样,被移植到Number对象下,作用保持不变
parseFloat('1.23asd'); //1.23
Number.parseFloat('1.23asd')//1.23
新特性:Number.isInteger函数
用来判断是否是整数
Number.isInteger(1.2)//false
Number.isInteger(1)//true
不过有一点要注意:在javascript内部对整数和浮点数采用一样的存储方式,因此小数点后如果都是0的浮点数,
都会被认为是整数。看个例子就知道了
Number.isInteger(1.000000)//true
极小常量
Number.EPSILON常量:定义一个极小的数值。
console.log(Number.EPSILON); // 2.220446049250313e-16
2.220446049250313e-16是一个极小的数值,约等于0.00000000000000022204。
干嘛要定义一个这样的数值,在什么情况下会用它呢?
Number.EPSILON的出现是用来判断浮点数的计算误差,
如果浮点数计算得到的误差不超过Number.EPSILON的值,就表示可以接受这样的误差
安全整数
ES6引入了安全整数,js能够准确表示的数字在-2^53到2^53之间,超过这个范围,无法精确表示这个值。故称之为不安全。
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
ES6对Math对象的扩展
新特性:Math.trunc函数
用于去除一个数的小数部分,返回整数部分
Math.trunc(1.23)//1
Math.trunc(1)//1
新特性:Math.sign函数
用来判断一个数到底是正数、负数、还是零
Math.sign(3)//1
Math.sign(-3)//-1
Math.sign(0)//0
Math.sign("abc")//NaN
参数如果是正数,结果返回1;如果是负数,结果返回-1;如果是0,结果返回0;
如果是一个非数值类型的参数,结果返回:NaN。
新特性:Math.cbrt函数
用于计算一个数的立方根。
Math.cbrt(8)//2
Math.cbrt(27)//3