ES6中数值的扩展

版权声明:可以装载,装载请在第一行注明出处。本人文章如有侵权,请凉席本人删除 https://blog.csdn.net/weixin_43532346/article/details/84945132
  1. 0B和0O
    ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示。
    Number()方法把0B或0O转化成十进制

  2. Number.isFinite() 和 Number.isNaN()
    Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity。如果参数类型不是数值,Number.isFinite一律返回false。
    Number.isNaN()用来检查一个值是否为NaN。参数类型不是NaN,Number.isNaN一律返回false。

    和传统方法区别:
    传统的全局方法isFinite()和isNaN()的区别在于,传统方法先调用Number()将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效,Number.isFinite()对于非数值一律返回false, Number.isNaN()只有对于NaN才返回true,非NaN一律返回false。

  3. Number.parseInt() 和 Number.parseFloat()
    ES6 将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为完全保持不变。目的是逐步减少全局性方法,使得语言逐步模块化。

  4. Number.isInteger()
    判断一个数值是否为整数。如果参数不是数值,Number.isInteger返回false。
    如果对数据精度的要求较高,不建议使用Number.isInteger()判断一个数值是否为整数。

  5. Number.EPSILON
    ES6 在Number对象上面,新增一个极小的常量Number.EPSILON。根据规格,它表示 1 与大于 1 的最小浮点数之间的差。实质是一个可以接受的最小误差范围。

对于 64 位浮点数来说,大于 1 的最小浮点数相当于二进制的1.00…001,小数点后面有连续 51 个零。这个值减去 1 之后,就等于 2 的 -52 次方。

Number.EPSILON === Math.pow(2, -52)
// true
Number.EPSILON
// 2.220446049250313e-16
Number.EPSILON.toFixed(20)
// "0.00000000000000022204"

Number.EPSILON实际上是 JavaScript 能够表示的最小精度。误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。
引入一个这么小的量的目的,在于为浮点数计算,设置一个误差范围。

  1. 安全整数和 Number.isSafeInteger()
    判断一个整数是否落在这个范围之内。ES6 引入了Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER这两个常量,用来表示这个范围的上下限。
    注意。验证运算结果是否落在安全整数的范围内,不要只验证运算结果,而要同时验证参与运算的每个值

  2. Math 对象的扩展
    (1) Math.trunc() 用于去除一个数的小数部分,返回整数部分。 对于非数值,内部使用Number方法将其先转为数值。对于空值和无法截取整数的值,返回NaN。

    (2) Math.sign() 判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。它会返回五种值。
    参数为正数,返回+1;
    参数为负数,返回-1;
    参数为 0,返回0;
    参数为-0,返回-0;
    其他值,返回NaN。
    注:如果参数是非数值,会自动转为数值。对于那些无法转为数值的值,会返回NaN。

    (3) Math.cbrt 计算一个数的立方根。 对于非数值,Math.cbrt方法内部也是先使用Number方法将其转为数值。

    Math.clz32() 计算一个数的 32 位二进制形式的前导 0 的个数 。
    左移运算符(<<)与Math.clz32方法直接相关。
    对于小数,Math.clz32方法只考虑整数部分。
    对于空值或其他类型的值,Math.clz32方法会将它们先转为数值,然后再计算。

    (4) Math.imul 返回两个数以 32 位带符号整数形式相乘的结果,返回的也是一个 32 位的带符号整数。

    (5) Math.fround 返回一个数的32位单精度浮点数形式。对于32位单精度格式来说,数值精度是24个二进制位(1 位隐藏位与 23 位有效位),所以对于 -224 至 224 之间的整数(不含两个端点),返回结果与参数本身一致。
    如果参数的绝对值大于 224,返回的结果便开始丢失精度。
    Math.fround方法的主要作用,是将64位双精度浮点数转为32位单精度浮点数。如果小数的精度超过24个二进制位,返回值就会不同于原值,否则返回值不变(即与64位双精度值一致)。
    对于 NaN 和 Infinity,此方法返回原值。对于其它类型的非数值,Math.fround 方法会先将其转为数值,再返回单精度浮点数。

    (6) Math.hypot 返回所有参数的平方和的平方根。

对数方法
(7) Math.expm1(x)返回 ex - 1,即Math.exp(x) - 1。
(8) Math.log1p(x)方法返回1 + x的自然对数,即Math.log(1 + x)。如果x小于-1,返回NaN。
(9) Math.log10(x)返回以 10 为底的x的对数。如果x小于 0,则返回 NaN。
(10) Math.log2(x)返回以 2 为底的x的对数。如果x小于 0,则返回 NaN。
(11) Math.sinh(x) 返回x的双曲正弦(hyperbolic sine)
(12) Math.cosh(x) 返回x的双曲余弦(hyperbolic cosine)
(13) Math.tanh(x) 返回x的双曲正切(hyperbolic tangent)
(14) Math.asinh(x) 返回x的反双曲正弦(inverse hyperbolic sine)
(15) Math.acosh(x) 返回x的反双曲余弦(inverse hyperbolic cosine)
(16) Math.atanh(x) 返回x的反双曲正切(inverse hyperbolic tangent)

指数运算
(18)ES2016 新增了一个指数运算符()。
指数运算符可以与等号结合,形成一个新的赋值运算符(
=)。

let a = 1.5;
a **= 2;
// 等同于 a = a * a;

let b = 4;
b **= 3;
// 等同于 b = b * b * b;

注意,V8 引擎的指数运算符与Math.pow的实现不相同,对于特别大的运算结果,两者会有细微的差异。

//两个运算结果的最后一位有效数字是有差异的

Math.pow(99, 99)
// 3.697296376497263e+197

99 ** 99
// 3.697296376497268e+197
  1. 本文主要参考http://es6.ruanyifeng.com/#docs/number,如有问题,欢迎评论

猜你喜欢

转载自blog.csdn.net/weixin_43532346/article/details/84945132