toFinite

语法

_.toFinite(value)

转换 value 为一个有限数字。

源码

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

明确了这两点,toFinite就很简答了

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(无穷),只会返回一个有限的数字。

_.toFinite(3.2);
// => 3.2
 
_.toFinite(Number.MIN_VALUE);
// => 5e-324
 
_.toFinite(Infinity);
// => 1.7976931348623157e+308
 
_.toFinite('3.2');
// => 3.2

toInteger

转换 value 为一个整数。

function toInteger(value) {
  var result = toFinite(value),
      remainder = result % 1;

  return result === result ? (remainder ? result - remainder : result) : 0;
}

这个方法的逻辑很简单,先通过toFinite将传入的参数value转换成一个有限的数字。也就是无穷等会转换成一个具体的数字。

remainder就是判断result是否有小数位。

result === result判断是否是NaN,如果是NaN,返回0,

(remainder ? result - remainder : result)

如果remainder存在,则表明小数部分存在,result减去小数组分的值便是整数部分,否则直接返回整数的result


最普通的一个
301 声望41 粉丝

永远不要做你擅长的事。


引用和评论

1 篇内容引用
0 条评论