ES6对Number对象新增了isInteger函数、极小常量Number.EPSILON、安全整数;还将window对象下的4个函数移植到了Number对象下;此外,对Math对象扩展了17个新函数
- 在ES5中,我们存在几个全局函数 isNaN函数,isFinite函数,parseInt函数,parseFloat函数等,对于这些全局函数的使用很简单,就拿isNaN函数来举例。
- ES5中的写法是:
1
2isNaN(2.5); //结果:false
window.isNaN(2.5);//结果:false - 以上两种写法均可,isNaN是全局函数,本身就是属于window对象下的一个方法,所以大部分人会使用第一种写法。
- 但是在ES6的标准中,isNaN方法被移植到了Number对象上,也就是原本属于全局对象window下的函数,现在属于Number对象上了,同样被处理的函数还有isFinite函数,parseInt函数,parseFloat函数。
- 被移植后的函数使用方式是这样的:在使用之前必须指明它是Number对象下的函数,否则会被默认为window下的函数。
1
2Number.isNaN(2.5); //结果:false
Number.isNaN(NaN); //结果:true新特性:Number.isNaN函数
- Number.isNaN函数:用于判断传入的是否是非数值,注意:是判断非数值,而不是判断数值,IsNaN的全称是: is not a number。
1
2Number.isNaN(2.5); //结果:false
Number.isNaN(NaN); //结果:true 非数值Number.isNaN和 isNaN的区别
- 传统的isNaN函数会把非数值的参数转化成数值再进行判断,而Number. isNaN只对数值类型有效,非数值类型的参数一律返回false
1
2
3
4
5isNaN('abc');//结果:true
//'abc'无法转为一个数值,返回true
Number.isNaN('abc'); //结果:false
//'abc'是字符串,Number.isNaN不做类型转换,直接返回false所以我们在使用这个函数到时候还要小心,当返回false的时候,不一定就是一个数值,有可能是一个非数值类型的参数。
新特性:Number.isFinite函数
- Number.isFinite函数:用来检查一个数值是否有穷大
1
2
3
4
5Number.isFinite(1);
//结果:true,数值1是有穷
Number.isFinite(Infinity);
//结果:false,Infinity表示无穷大的特殊值isFinite函数跟isNaN函数一样,也只是对数值类型有效,对非数值类型的参数一律返回false。
1
Number.isFinite('abc'); //结果:false
- 当Number.isFinite函数返回false的时候,参数不一定就是一个有穷的数值类型,也有可能是一个非数值类型的参数。如:字符串’abc’
新特性:Number.parseInt函数
- parseInt函数:解析一个字符串,返回一个整数。parseInt函数同样是从window对象下移植到Number对象下,但是它的作用没有任何变化。
1
2
3
4
5
6
7//传统用法:
parseInt('12.3abc');
//结果:返回数值12
//ES6用法:
Number.parseInt('12.3abc');
//结果:返回数值12新特性:Number.parseFloat函数
` parseFloat函数:解析一个字符串,并返回一个浮点数。跟parseInt一样,被移植到Number对象下,作用保持不变1
2
3
4
5
6
7//传统用法:
parseFloat('12.3abc');
//结果:返回数值12.3
//ES6用法:
Number.parseFloat('12.3abc');
//结果:返回数值12.3 其实这么做的目的是慢慢地减少全局性的函数,把全局函数合理地规划到其他对象下,渐渐实现语言的模块化。
新增特性:Number.isInteger函数 判断是否是整数(常用)
- Number.isInteger函数:用来判断是否是整数。
1
2
3
4
5Number.isInteger(3.2);
//结果:false
Number.isInteger(3);
//结果:true注意:在javascript内部对整数和浮点数采用一样的存储方式,因此小数点后如果都是0的浮点数,都会被认为是整数
1
2
3
4
5Number.isInteger(3.0);
//结果:true
Number.isInteger(3.00);
//结果:trueNumber.EPSILON 极小常量
- Number.EPSILON常量:定义一个极小的数值。这个值很小,我们可以在控制台下打印出来看
1
2console.log(Number.EPSILON);
//结果:2.220446049250313e-16 - 引入这么小的一个常量的目的在于,为浮点数计算设置一个误差范围。因为浮点数的计算是不精确的。如果误差小于Number.EPSILON,我们就可以认为得到了正确的结果
1
2
3
4
5
6
7console.log(0.1+0.2); //0.30000000000000004
console.log(0.1+0.2-0.3); //5.551115123125783e-17
console.log((0.1+0.2-0.3).toFixed(20)); //"0.00000000000000005551"
// 那么我们再来看看0.1+0.2-0.3的值是否小于Number.EPSILON
//如果小于,返回true,那我们便可以认为结果正确
(0.1+0.2-0.3).toFixed(20)<Number.EPSILON; // true - 其实,Number.EPSILON就是一个可接受的误差范围
安全整数
- ES6为我们引入了安全整数的概念。什么?整数还有安全和不安全的说法?原来JavaScript能够准确表示的整数范围在-2^53到2^53之间,超过这个范围,无法精确表示这个值。故称之为不安全。
- 为此,ES6定义了两个常量来表示这个范围的最大值和最小值:Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER。
- 此外,如果给你一个数值,你不知道它是否超出了这个安全范围,你可以使用ES6给我们新增的一个函数Number.isSafeInteger来进行判断。`
1
2
3
4
5Number.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,表示不在安全范围内。
ES6给Math对象新增了17个函数,挑选几个常用的来讲解一下
新特性:Math.trunc函数返回整数部分 (常用)
- Math.trunc函数:用于去除一个数的小数部分,返回整数部分。
1
2
3
4
5Math.trunc(3);
//结果:3
Math.trunc(3.1);
//结果:3 - 如果传入的参数是整数,就直接返回整数,如果是小数,就去除了小数部分
新特性:Math.sign函数
- Math.sign函数:用来判断一个数到底是正数、负数、还是零。
1
2
3
4
5
6
7
8
9
10
11Math.sign(3);
//结果:1
Math.sign(-3);
//结果:-1
Math.sign(0);
//结果:0
Math.sign('abc');
//结果:NaN - 数如果是正数,结果返回1;如果是负数,结果返回-1;如果是0,结果返回0;如果是一个非数值类型的参数,结果返回:NaN。
新特性:Math.cbrt函数
- Math.cbrt函数:用于计算一个数的立方根。
1
2
3
4
5Math.cbrt(8);
//结果:2
Math.cbrt(27);
//结果:3 - 2的立方是8,那么8作为参数,开立方根得到的值就是2,3的立方是27,那么27求立方根就得到了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 的双曲正切。