# toFinite
# Description
转换 value 为一个有限数字。
# Params
Value
# Return
Number
# Depend
import toNumber from './toNumber.js'
# Code
/** Used as references for various `Number` constants. */
const INFINITY = 1 / 0
const MAX_INTEGER = 1.7976931348623157e+308
function toFinite(value) {
if (!value) {
return value === 0 ? value : 0
}
value = toNumber(value)
if (value === INFINITY || value === -INFINITY) {
const sign = (value < 0 ? -1 : 1)
return sign * MAX_INTEGER
}
return value === value ? value : 0
}
# Analyze
- 判断
value如果是falsely,则全部返回为0,这里使用了
return value === 0 ? value : 0
是为了判断 -0 的情况, 如果 value 是 -0 或者 0 ,都会返回 value 本身
- 调用
toNumber将value转换为数字 - 判断了
value是否已经超出了最大限制(js中的正负无穷大),如果是,获取 当前value的 符号(+-),然后返回JavaScript里所能表示的最大值或最小值 - 这里处理了
NaN, 会返回0,在JavaScript中NaN和NaN是不相等的
# Remark
- Number.MAX_VALUE MDN (opens new window)
- Number.MIN_VALUE MDN (opens new window)
- NaN MDN (opens new window)
- Math.sign MDN (opens new window)
- JavaScript相等性判断 MDN (opens new window)
全等操作符比较两个值是否相等,两个被比较的值在比较前都不进行隐式转换。如果两个被比较的值具有不同的类型,这两个值是不全等的。否则,如果两个被比较的值类型相同,值也相同,并且都不是 number 类型时,两个值全等。最后,如果两个值都是 number 类型,当两个都不是 NaN,并且数值相同,或是两个值分别为 +0 和 -0 时,两个值被认为是全等的。
# Example
toFinite(3.2) // => 3.2
toFinite(Number.MIN_VALUE) // => 5e-324
toFinite(Infinity) // => 1.7976931348623157e+308
toFinite('3.2') // => 3.2