語法數組
_.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