第八章:有关于数值

数值的扩展

二进制和八进制的表示法

  1. ES6提供了八进制和二进制数值的新鞋发,分别用前缀0b和0o表示。
  2. ES6进一步明确,八进制不在允许使用前缀0表示,要使用0o表示。
  3. 要将八进制和二进制转化为十进制的话,请使用Number方法。

    Number.isFinite,Number.isNaN()

    ####Number.isFinite
    此方法是用来检测这个值是否非无穷

    1
    2
    Number.isFinite(15)//true
    Number.isFinite(Infinity)//false

    Number.isNaN用来检测这个值是否为NaN

    1
    2
    3
    Number.isNaN(NaN)//true
    Number.isNaN(13)//false
    Number.isNaN(9/NaN)//true

    这两个新方法与传统的全局方法isFinite()和isNaN()区别在于,传统方法需要先调用Nimber()将非数值转化为数值,在进行判断,而新方法只对数值有效,对于非数值一律返回false。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    isFinite(25)//true
    isFinite('25')//true
    Number.isFinite(25)//true
    Number.isFinite('25')//false
    isNaN(NaN)//true
    isNaN('NaN')//true
    Number.isNaN(NaN)//true
    Number.isNaN('NaN')//false

Number.isInterger

这个方法用来判断一个值是否为整数。需要注意,在Javascript内部,整数和浮点数使用同样的储存方式,所以3和3.0是同一个值。

Number.EPSILON

这个方法是为Number对象上添加了一个极小的常量。引入一个极小的常量是用来浮点数计算中设置一个误差范围,我们知道浮点数计算是不正确的。

1
2
3
4
5
6
7
8
0.1+0.2
//0.3000000000000004
0.1 + 0.2 - 0.3
//5.551115123125783e-17
console.log(5.551115123125783-17 < Number.EPSILON)
//true

因此,Number.EPSILON的实质是一个可以接受的误差范围。

安全整数和Number.isSafeInteger()

javaScript能够准确的表示的整数范围在-2^{53}到2^{53}之间(不含两个端点),超过这个范围就无法精确表示。
ES6引入了Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER两个常量,用来表示这个范围的上下限。
Number.isSafeInteger()则用来判断一个整数是否落在这个范围内

1
2
3
Number.isSafeInteger(NaN)//false
Number.isSafeInteger(1.2)//false
Number.isSafeInteger(Number_MAX_SAFE_INTEGER)//true

注意,验证运算结果是否落在安全整数的范围内,不要只验证运算结果,而要同时验证参与运算的每一个值。