# 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