_.toFinite(value)
166
_.toFinite(value)
_.toFinite将一个值转换成一个有限的数字
参数
value (*): 需要转换的值
返回值
(number): 返回转换好的数值
例子
_.toFinite(3.2); // => 3.2 _.toFinite(Number.MIN_VALUE); // => 5e-324 _.toFinite(Infinity); // => 1.7976931348623157e+308 _.toFinite('3.2'); // => 3.2
源代码
import toNumber from './toNumber.js' /** Used as references for various `Number` constants. */ const INFINITY = 1 / 0 const MAX_INTEGER = 1.7976931348623157e+308 /** * Converts `value` to a finite number. * * @since 4.12.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted number. * @example * * toFinite(3.2) * // => 3.2 * * toFinite(Number.MIN_VALUE) * // => 5e-324 * * toFinite(Infinity) * // => 1.7976931348623157e+308 * * toFinite('3.2') * // => 3.2 */ //将一个值转换成一个有限的数字 function toFinite(value) { if (!value) {//如果value为假,返回0 return value === 0 ? value : 0 } value = toNumber(value)//将value转换成number类型 if (value === INFINITY || value === -INFINITY) {//如果是无限 const sign = (value < 0 ? -1 : 1)//正负标记 return sign * MAX_INTEGER//转换成有限值 } return value === value ? value : 0//返回结果,如果是NaN就返回0 } export default toFinite
toNumber
import isObject from './isObject.js' import isSymbol from './isSymbol.js' /** Used as references for various `Number` constants. */ const NAN = 0 / 0 /** Used to match leading and trailing whitespace. */ const reTrim = /^\s+|\s+$/g /** Used to detect bad signed hexadecimal string values. */ const reIsBadHex = /^[-+]0x[0-9a-f]+$/i /** Used to detect binary string values. */ const reIsBinary = /^0b[01]+$/i /** Used to detect octal string values. */ const reIsOctal = /^0o[0-7]+$/i /** Built-in method references without a dependency on `root`. */ const freeParseInt = parseInt /** * Converts `value` to a number. * * @since 4.0.0 * @category Lang * @param {*} value The value to process. * @returns {number} Returns the number. * @see isInteger, toInteger, isNumber * @example * * toNumber(3.2) * // => 3.2 * * toNumber(Number.MIN_VALUE) * // => 5e-324 * * toNumber(Infinity) * // => Infinity * * toNumber('3.2') * // => 3.2 */ //将一个值转换成数字 function toNumber(value) { if (typeof value == 'number') {//如果是number直接返回 return value } if (isSymbol(value)) {//如果是Symbol类型,返回NaN return NAN } if (isObject(value)) {//如果value是对象 const other = typeof value.valueOf == 'function' ? value.valueOf() : value //如果value有valueOf属性,就调用valueOf()取值,否则取原值 value = isObject(other) ? `${other}` : other //如果other是对象,就转成字符串,否则取原值 } if (typeof value != 'string') {//value被转成字符串后的处理 return value === 0 ? value : +value } value = value.replace(reTrim, '')//正则把空白字符都转换成空字符串 const isBinary = reIsBinary.test(value)//判断是否是二进制 return (isBinary || reIsOctal.test(value)) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : (reIsBadHex.test(value) ? NAN : +value) //如果是二进制或者八进制,调用parseInt转换 //否则判断不良签名的十六进制转为NaN } export default toNumber

浙公网安备 33010602011771号