Number
数值
二进制与八进制
es6提供新的写法,分别为
- 前缀0b(0B)
- 前缀0o(0O)
从 ES5 开始,在严格模式之中,八进制就不再允许使用前缀0表示,ES6 进一步明确,要使用前缀0o表示。
如果要将0b和0o前缀的字符串数值转为十进制,要使用Number方法。
Number('0b111') // 7
1. Number.isFinite()
Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity
Number.isFinite(0.8); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
2. Number.isNaN()
isNaN()用来检查一个值是否为NaN。
与window.isNaN不同
isNaN(NaN) // true
isNaN("NaN") // true 会转为Number进行比较 字母转为number一般直接NaN
Number.isNaN(NaN) // true
Number.isNaN("NaN") // false
Number.isNaN(1) // false
3. parseInt parseFloat
window.parseInt/parseFloat 转为了Number的静态方法
4. Number.isInteger()
Number.isInteger()用来判断一个数值是否为整数。
Number.isInteger(25) // true
会有误判情况
Number.isInteger(3.0000000000000002) // true
5. Number.EPSILON
新增一个极小的常量Number.EPSILON。根据规格,它表示 1 与大于 1 的最小浮点数之间的差。
Number.EPSILON === Math.pow(2, -52)
Number.EPSILON实际上是 JavaScript 能够表示的最小精度。误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。
我们知道,浮点型的计算并不精确
0.1 + 0.2 === 0.3 // false
Number((0.1 + 0.2).toFixed(1)) === 0.3 // true
我们可以抽象一个函数,用于检测浮点型运算
function withinErrorMargin (left, right) {
// 比如,误差范围设为 2 的-50 次方(即Number.EPSILON * Math.pow(2, 2))实际上可以直接用Number.EPSILON
return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2);
}
0.1 + 0.2 === 0.3 // false
withinErrorMargin(0.1 + 0.2, 0.3) // true
6. 安全整数和 Number.isSafeInteger()
JavaScript 能够准确表示的整数范围在-253到253之间(不含两个端点),超过这个范围,无法精确表示这个值。
ES6 引入了
Number.MAX_SAFE_INTEGER
Number.MIN_SAFE_INTEGER
这两个常量,用来表示这个范围的上下限。
Number.isSafeInteger()则是用来判断一个整数是否落在这个范围之内
Number.isSafeInteger('a') // false
Number.isSafeInteger(null) // false
Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1) // false
Math扩展
ES6 在 Math 对象上新增了 17 个与数学相关的方法。所有这些方法都是静态方法,只能在 Math 对象上调用。
1. Math.trunc()
Math.trunc方法用于去除一个数的小数部分,返回整数部分。
对于非数值,Math.trunc内部使用Number方法将其先转为数值。
Math.trunc("4.1") // 4
Math.trunc(-4.9) // -4
Math.trunc(-0.1234) // -0
对于空值和无法截取整数的值,返回NaN。
Math.trunc('foo'); // NaN
2. Math.sign()
Math.sign方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。
它会返回五种值。
- 参数为正数,返回+1;
- 参数为负数,返回-1;
- 参数为 0,返回0;
- 参数为-0,返回-0;
- 其他值,返回NaN。
3. Math.cbrt()
Math.cbrt方法用于计算一个数的立方根。
4. Math.clz32()
Math.clz32()方法将参数转为 32 位无符号整数(二进制0b)的形式
5. Math.imul()
相当于 a*b 之所以需要部署这个方法,是因为 JavaScript 有精度限制,超过 2 的 53 次方的值无法精确表示。这就是说,对于那些很大的数的乘法,低位数值往往都是不精确的,Math.imul方法可以返回正确的低位数值。
6. Math.fround()
Math.fround方法返回一个数的32位单精度浮点数形式。
7. Math.hypot()
Math.hypot方法返回所有参数的平方和的平方根。