Number

2019-11-22  本文已影响0人  zdxhxh

数值

二进制与八进制

es6提供新的写法,分别为

从 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方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。

它会返回五种值。

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方法返回所有参数的平方和的平方根。

上一篇 下一篇

猜你喜欢

热点阅读