语法数组
_.toFinite(value)
转换 value 为一个有限数字。code
源码rem
import toNumber from './toNumber.js'; /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0, MAX_INTEGER = 1.7976931348623157e+308; /** * Converts `value` to a finite number. * * @static * @memberOf _ * @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) { 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; }
toFinite
方法的的做用是转成有限的数字。至于无限是什么,无穷就是无限。源码
var INFINITY = 1 / 0, //Infinity MAX_INTEGER = 1.7976931348623157e+308; //
MAX_INTEGER
这个值能够经过Number.MAX_VALUE
获取到,大于MAX_INTEGER表明Infinity
it
明确了这两点,toFinite
就很简答了io
function toFinite(value) { if (!value) { return value === 0 ? value : 0; // 不传value 直接返回0 } value = toNumber(value); //调用tonumber转换成number类型 if (value === INFINITY || value === -INFINITY) { //正无穷或者负无穷 ,设置一个 标记sign, var sign = (value < 0 ? -1 : 1); // sign -1 || 1 return sign * MAX_INTEGER; // 返回对应的最大值或者最小值。 } return value === value ? value : 0;// 过滤掉NaN }
总结一下toFinite
不会返回NaN ,或者Infinity(无穷),只会返回一个有限的数字。function
_.toFinite(3.2); // => 3.2 _.toFinite(Number.MIN_VALUE); // => 5e-324 _.toFinite(Infinity); // => 1.7976931348623157e+308 _.toFinite('3.2'); // => 3.2
转换 value 为一个整数。class
function toInteger(value) { var result = toFinite(value), remainder = result % 1; return result === result ? (remainder ? result - remainder : result) : 0; }
这个方法的逻辑很简单,先经过toFinite
将传入的参数value转换成一个有限的数字。也就是无穷等会转换成一个具体的数字。import
remainder
就是判断result是否有小数位。sed
result === result
判断是不是NaN
,若是是NaN,返回0,
(remainder ? result - remainder : result)
若是remainder存在,则代表小数部分存在,result减去小数组分的值即是整数部分,不然直接返回整数的result