乐趣区

关于javascript:ES6新增APINumber篇

新增的动态属性

ES6 在 Number 对象上新增了一些动态常量属性,用于辅助计算。

  1. Number.EPSILON

    Number.EPSILON2-52)代表任意两个数值之间的最小差值,换句话说,如果 a 与 b 的差值的绝对值小于Number.EPSILON,那么咱们就能够认为这两个值是相等的。即:

    $$
    |a-b|<Number.EPSILON \ \ \} \Longrightarrow a=b
    $$

    在 JavaScript 中,整数并不是一个独自的类型。和咱们设想的可能有些不同的是,JS 中 所有的数字 都是 双精度浮点数 。然而浮点运算只能产生近似的后果,四舍五入到最靠近的整数,所以有的时候,运算的 精度 会是一个问题。

    console.log(0.1 + 0.2); //0.30000000000000004
    console.log(0.1 + 0.2 === 0.3);//false

    这种时候咱们就能够间接应用常量 Number.EPSILON 来进行精度判断了:

    function isEqual(a, b) {return Math.abs(a - b) < Number.EPSILON;
    }
    console.log(isEqual(0.1 + 0.2, 0.3));//true
  2. Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER

    这两个常量 Number.MAX_SAFE_INTEGER253-1)、Number.MIN_SAFE_INTEGER-253+1)和他们的名字一样,别离代表了 JS 中可能 平安解决 的最大整数和最小整数。

    后面曾经介绍过,JS 中的数字都是双精度浮点数,而双精度浮点数最多能示意 53 位精度的整数,它示意的整数范畴是 [ -253+1 , 253-1 ]。当一个整数超出这个范畴之后,JS 便不可能再“平安 ”地解决这个整数了,这里的“ 平安 ”指的是 JS 可能 正确地示意整数并且可能正确地比拟整数

    console.log(2 ** 53 - 1 === Number.MAX_SAFE_INTEGER);
    console.log(-(2 ** 53 - 1) === Number.MIN_SAFE_INTEGER);
    // 显然,a+1===a+2, 是不合乎咱们的预期的。console.log(Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2); //true

新增的动态函数

  1. Number.isNaN

    函数类型:

    // 接管一个任意类型的可选参数,返回一个布尔值后果
    (v?:any)=>boolean

    Number.isNaN是用于解决本来的全局函数 window.isNaN 的缺点的。在 window.isNaN 中,会先将传入的非 number 类型的参数转换为 number 类型,而后进行判断,这就导致了一些在咱们看来很奇怪的后果:

    //'str' 转成 number 类型之后失去 NaN
    console.log(isNaN('str')); //true
    //'' 转成 number 类型之后失去 0 
    console.log(isNaN('')); //false

    Number.isNaN修改了这一行为,不会将参数转成number,所以它的执行后果可能会更合乎咱们的预期。

    console.log(Number.isNaN('str')); //false
    console.log(Number.isNaN('')); //false
  1. Number.isFinite

    函数类型:

    // 接管一个任意类型的可选参数,返回一个布尔值后果
    (v?:any)=>boolean

    Number.isFinite用于判断传入的参数是否是一个有穷值。它与全局的 window.isFinite 的关系能够类比 Number.isNaN 函数与 isNaN 的关系:全局的 isFinite 函数会将参数转为 number,而Number.isFinite 不会 这样做。

    基本上,Number.isFinite(a) === (typeof a=== 'number' && isFinite(a))

    console.log(Number.isFinite(42)); //true
    console.log(isFinite(42)); //true
    console.log(Number.isFinite('42')); //false
    console.log(isFinite('42')); //true
  1. Number.isInteger

    函数类型:

    // 接管一个任意类型的可选参数,返回一个布尔值后果
    (v?:any)=>boolean

    因为 JS 中的数字都是双精度浮点数,所以咱们是没有方法通过类型来判断一个数是否是整数的。ES6 新增的 Number.isInteger 就是用于解决这个问题——判断一个值是不是整数,的辅助函数。

    console.log(Number.isInteger('42')); //false
    console.log(Number.isInteger(42.0)); //true
    console.log(Number.isInteger(42.1)); //false
  2. Number.isSafeInteger

    Number.isSafeIntegerNumber.isInteger 相比,多了一个限定范畴,也就是平安地整数范畴 [ Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER ]

退出移动版