提示:
本文为JavaScript栏目:JavaScript高级系列——ES6新特性章节 第四章
JavaScript高级学习:ES6新特性04——数值的扩展操作
前言
本文讲解ES6数值的扩展操作。
提示:以下是本篇文章正文内容,下面案例可供参考
数值的扩展操作
isNaN函数
ES5中的isNaN直接调用,他的操作会先把参数转换为数字再来进行判断
let number=15;
let number2="20";
let number3="abc"
console.log(isNaN(number));//false
console.log(isNaN(number2));//false
console.log(isNaN(number3));//true
let num=new Number("20");
console.log(typeof num.toString());//20 字符串类型
console.log(typeof num.valueOf());//20 数字
在ES6中的Number.isNaN(number),函数的参数只要不是NaN类型,结果一定是false。
console.log(Number.isNaN(number)); //false
console.log(Number.isNaN(number2)); //false
console.log(Number.isNaN(number3)); //false
字符串abc是string类型,他转换数值的时候会被转换为NaN这个值。
NaN本身属于数值类型,是一个具体的数值。
这是什么意思呢?举例说明
console.log(typeof NaN);//number
切记:NaN与任何数值参与计算解构都是NaN
console.log(Number.isNaN(NaN)); //true
console.log(Number.isNaN(NaN+9)); //true--NaN与任何数值参与计算解构都是NaN
console.log(Number.isNaN(9/0)); //禁止写法 false 违背除法算式规则
isFinite函数
isFinite函数用来判断一个数值是否是有限的值
ES5中使用
console.log(isFinite(15)); //true
console.log(Infinity); //表示数值
console.log(isFinite(Infinity)); //false
console.log(isFinite("15")); //true
console.log(isFinite("abc")); //false
ES6中使用
console.log(Number.isFinite(15)); //true
console.log(Number.isFinite(Infinity)); //false
console.log(Number.isFinite("15")); //false
console.log(Number.isFinite("abc")); //false
总结
ES5中isNaN、isFinite和ES6中Number .isNaN、Number .isFinite的区别:
- ES5中isNaN和isFinite对参数都会先执行数值转换的操作,再来进行比较。
- ES6中Number.isNaN判断时,参数只要不是NaN结果就一定是false。
- ES6中Number.isFinite判断是,参数只要不是数值结果就一定是false。
数值转换
parseInt:ES5的用法
console.log(parseInt(6.5)); //6
console.log(parseInt("6.5")); //6
console.log(parseInt("6abc")); //6
parseInt:ES6的用法
console.log(Number.parseInt(6.5)); //6
console.log(Number.parseInt("6.5")); //6
console.log(Number.parseInt("6abc")); //6
xparseInt和Number .panseInt除了写法上没有区别,ES6只是在Number内置函数中增加了这个方法的实现。ES6推荐使用该方案。
parseFloat同理也有Number.parseFloat的用法。
目的是为了减少全局方法。
isInteger函数
isInteger函数判断整数
console.log(Number.isInteger(6)); //true
console.log(Number.isInteger(6.0)); //true---6和6.0是等价的,JS中认为6.0是整数
console.log(Number.isInteger(6.1)); //false
console.log(Number.isInteger("6")); //false---参数不为数值则转结果为false,参数不进行转换
console.log(Number.isInteger(NaN)); //false
trunc和floor函数
trunc和floor函数都是用于取整
console.log(Math.trunc(6.5)); //6
console.log(Math.floor(6.5)); //6
console.log(Math.trunc(-6.5)); //-6
console.log(Math.floor(-6.5)); //-7
console.log(Math.ceil(-6.5)); //-6
fLoor是向下取整,找的是距离参数最近的一个比他小的整数。
Number.EPSILON极小常量
表示 1 与大于 1 的最小浮点数之间的差.
Number.EPSILON实际上是 JavaScript 能够表示的最小精度。误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。
console.log(Number.EPSILON); //2.220446049250313e-16
在JS中,浮点数的计算是不准确的,比如0.1+0.2的值竟然不是0.3。
Number.EPSILON可以用来设置“能够接受的误差范围”。比如,误差范围设为 2 的-50 次方(即Number.EPSILON * Math.pow(2, 2)),即如果两个浮点数的差小于这个值,我们就认为这两个浮点数相等。
Number.EPSILON的实质是一个可以接受的最小误差范围。
举例说明:
function withinErrorMargin(left, right) {
return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2);
}
console.log(0.1 + 0.2 === 0.3);// false
console.log(withinErrorMargin(0.1 + 0.2, 0.3));// true
console.log(withinErrorMargin(3.14,3.1400000000000000000000005));// true