/**
* 转换value为一个有限的数字
* Converts `value` to a finite number.
* @param {*} value The value to convert.
* @returns {number} Returns the converted number
* @example
*
* toFinite(3.3)
* // => 3.3
*
* toFinite(Number.MIN_VALUE)
* // => 5e-324
*
* toFinite(Infinity)
* // => 1.7976931348623157e+308
*
* toFinite('3.2')
* // => 3.2
*
* toFinite(NaN)
* // => 0
*
* toFinite(new Date())
* // => 1561430693003
*
* toFinite(() => {}))
* // => 0
*/
import toNumber from "./toNumber" //见下面另一段代码
const INFINITY = 1 / 0
const MAX_INTEGER = Number.MAX_VALUE || 1.7976931348623157e308
function toFinite(value) {
if (!value) {
return value === 0 ? value : 0
}
value = toNumber(value)
if (value === INFINITY || value === -INFINITY) {
var sign = value < 0 ? -1 : 1
return sign * MAX_INTEGER
}
return value === value ? value : 0 //NaN 不等于 NaN
}
export default toFinite
/**
* Converts `value` to a number.
*
* @param {*} value The value to process
* @returns {number} Returns the number.
* @example
*
* toNumber('3')
* // => 3
*
* toNumber(Number.MIN_VALUE)
* // => 5e-324
*
* toNumber(Infinity)
* // => Infinity
*
* toNumber('0b111110111')
* // => 503
*
* toNumber('0o767')
* // => 503
*
* toNumber(new Date())
* // => 1561389053138
*
* toNumber(() => {})
* // => NaN
*/
const NAN = 0 / 0
const symbolTag = "[object Symbol]"
function isObjectLike(value) {
return typeof value == "object" && value !== null
}
function isSymbol(value) {
return (
typeof value === "symbol" ||
(isObjectLike(value) && Object.prototype.toString.call(value) === symbolTag)
)
}
function toNumber(value) {
if (typeof value === "number") {
return value
}
if (isSymbol(value)) {
return NAN
}
return Number(value)
}
export default toNumber