Number的扩展

进制表示

0b(0B)表示二进制,0o(0O)表示八进制

Number.isFinite()、Number.isNaN()

Number.isFinite 用来检查一个数值是否为有限的。

1
2
3
4
5
6
Number.isFinite(NaN) //false
Number.isFinite(Infinity) //false
Number.isFinite(-Infinity) //false
Number.isFinite("15") //false
Number.isFinite("foo") //false
Number.isFinite(true) //false

ES5 部署 Number.isFinite()方法:

1
2
3
4
5
6
7
8
9
10
11
12
;(function (global) {
var global_isFinite = global.isFinite

Object.defineProperty(Number, "isFinite", {
value: function isFinite(value) {
return typeof value === "number" && global_isFinite(value)
},
configurable: true,
enumerable: false,
writable: true,
})
})(this)

Number.isNaN 用来检查一个值是否为 NaN。

1
2
3
4
5
Number.isNaN(NaN) //true
Number.isNaN("15") //false
Number.isNaN(9 / NaN) //true
Number.isNaN("true" / 0) //true
Number.isNaN("true" / "true") //true

ES5 部署 Number.isNaN()方法:

1
2
3
4
5
6
7
8
9
10
11
12
;(function (global) {
var global_isNaN = global.isNaN

Object.defineProperty(Number, "isNaN", {
value: function isNaN(value) {
return typeof value === "number" && global_isNaN(value)
},
configurable: true,
enumerable: false,
writable: true,
})
})(this)

Number.parseInt()、Number.parseFloat()

ES6 将全局方法 parseInt 和 parseFloat 移植到了 Number 对象上面,行为完全不变。

Number.isInteger()

Number.isInteger 判断一个值是否为整数。在 JavaScript 内部,整数和浮点数是相同的储存方法,所以 3 和 3.0 视为同一个值。

1
2
Number.isInteger("15") //false
Number.isInteger(true) //false

ES5 部署 Number.isInteger()方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
;(function (global) {
var floor = Math.floor,
isFinite = global.isFinite

Object.defineProperty(Number, "isInteger", {
value: function isInteger(value) {
return (
typeof value === "number" && isFinite(value) && floor(value) == value
)
},
configurable: true,
enumerable: false,
writable: true,
})
})(this)

Number.EPSILON

ES6 在 Number 对象上面新增一个极小的常量–Number.EPSILON
浮点数计算是不精确的,但是如果这个误差可以小于 Number.EPSILON,就可以认为得到了正确的结果。

Number.isSafeInteger()

JavaScript 能够准确表示的整数范围在$-2^{53}$到$2^{53}$之间(不含两个端点),超过这个范围就无法精确表示。
ES6 引入了 Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER 两个常量来表示这个范围的上下限

1