es6学习笔记-数值的扩展
有一些不常用或者还不支持的就没有记录了,总体来说本篇只是一个备忘而已
Number.isFinite(), Number.isNaN()
Number.isFinite()用来检查一个数值是否为有限的(finite)。
console.log(Number.isFinite(15)); // true
console.log(Number.isFinite(0.8)); // true
console.log(Number.isFinite(NaN)); // false
console.log(Number.isFinite(Infinity)); // false
console.log(Number.isFinite(-Infinity)); // false
console.log(Number.isFinite('foo')); // false,字符串也是false
console.log(Number.isFinite('15')); // false
console.log(Number.isFinite(true)); // false,布尔值也是false
Number.isNaN()用来检查一个值是否为NaN。
console.log(Number.isNaN(NaN)) // true
console.log(Number.isNaN(15)) // false
console.log(Number.isNaN('15')) // false
console.log(Number.isNaN(true)) // false
console.log(Number.isNaN(9/NaN)) // true
console.log(Number.isNaN('true'/0)) // true
console.log(Number.isNaN('true'/'true')) // true
两个新方法只对数值有效,非数值一律返回false。
parseInt()和parseFloat()
ES6将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为完全保持不变。
// ES5的写法
parseInt('12.34') // 12
parseFloat('123.45#') // 123.45
// ES6的写法
Number.parseInt('12.34') // 12
Number.isInteger()
Number.isInteger()用来判断一个值是否为整数。需要注意的是,在JavaScript内部,整数和浮点数是同样的储存方法,所以3和3.0被视为同一个值。
console.log(Number.isInteger(25)) // true
console.log(Number.isInteger(25.0)) // true
console.log(Number.isInteger(25.1)) // false
console.log(Number.isInteger("15")) // false
console.log(Number.isInteger(true)) // false
Number.EPSILON
ES6在Number对象上面,新增一个极小的常量Number.EPSILON,为浮点数计算,设置一个误差范围。
如果这个误差能够小于Number.EPSILON,我们就可以认为得到了正确结果。
0.1 + 0.2
// 0.30000000000000004
0.1 + 0.2 - 0.3
// 5.551115123125783e-17
5.551115123125783e-17.toFixed(20)
// '0.00000000000000005551' //无限接近0
Number.EPSILON.toFixed(20)
// '0.00000000000000022204' //只要比这个数小,我们就当他是正确的
function withinErrorMargin (left, right) {
return Math.abs(left - right) < Number.EPSILON;
}
console.log(withinErrorMargin(0.1 + 0.2, 0.3))
// true
console.log(withinErrorMargin(0.2 + 0.2, 0.3))
// false
安全整数和Number.isSafeInteger()
JavaScript能够准确表示的整数范围在-2^53到2^53之间(不含两个端点),超过这个范围,无法精确表示这个值。
console.log(Math.pow(2, 53)); // 9007199254740992
console.log(Number.MAX_SAFE_INTEGER === Math.pow(2, 53) + 1)//false
console.log(Number.MAX_SAFE_INTEGER === Math.pow(2, 53) - 1) //true,等于一个比最大范围少于1的数
同理可鉴Number.MAX_SAFE_INTEGER
Number.isSafeInteger()则是用来判断一个整数是否落在这个范围之内。
console.log(Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1)) // false
console.log(Number.isSafeInteger(Number.MIN_SAFE_INTEGER)) // true
console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER)) // true
console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1)) // false
Math对象的扩展
Math.trunc
Math.trunc方法用于去除一个数的小数部分,返回整数部分
console.log(Math.trunc(4.1)) // 4
console.log(Math.trunc(4.9)) // 4
console.log(Math.trunc(-4.1)) // -4
console.log(Math.trunc(-4.9)) // -4
console.log(Math.trunc(-0.1234)) // -0
Math.sign()
Math.sign方法用来判断一个数到底是正数、负数、还是零。
console.log(Math.sign(-5)) // -1
console.log(Math.sign(5)) // 1
console.log(Math.sign(0)) // 0
console.log(Math.sign(-0)) // -0
console.log(Math.sign(NaN)) // NaN
console.log(Math.sign('foo')); // NaN
console.log(Math.sign()); // NaN
参考引用:
es6数值扩展