time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

toNumber.js (1519B)


      1 var baseTrim = require('./_baseTrim'),
      2     isObject = require('./isObject'),
      3     isSymbol = require('./isSymbol');
      4 
      5 /** Used as references for various `Number` constants. */
      6 var NAN = 0 / 0;
      7 
      8 /** Used to detect bad signed hexadecimal string values. */
      9 var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
     10 
     11 /** Used to detect binary string values. */
     12 var reIsBinary = /^0b[01]+$/i;
     13 
     14 /** Used to detect octal string values. */
     15 var reIsOctal = /^0o[0-7]+$/i;
     16 
     17 /** Built-in method references without a dependency on `root`. */
     18 var freeParseInt = parseInt;
     19 
     20 /**
     21  * Converts `value` to a number.
     22  *
     23  * @static
     24  * @memberOf _
     25  * @since 4.0.0
     26  * @category Lang
     27  * @param {*} value The value to process.
     28  * @returns {number} Returns the number.
     29  * @example
     30  *
     31  * _.toNumber(3.2);
     32  * // => 3.2
     33  *
     34  * _.toNumber(Number.MIN_VALUE);
     35  * // => 5e-324
     36  *
     37  * _.toNumber(Infinity);
     38  * // => Infinity
     39  *
     40  * _.toNumber('3.2');
     41  * // => 3.2
     42  */
     43 function toNumber(value) {
     44   if (typeof value == 'number') {
     45     return value;
     46   }
     47   if (isSymbol(value)) {
     48     return NAN;
     49   }
     50   if (isObject(value)) {
     51     var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
     52     value = isObject(other) ? (other + '') : other;
     53   }
     54   if (typeof value != 'string') {
     55     return value === 0 ? value : +value;
     56   }
     57   value = baseTrim(value);
     58   var isBinary = reIsBinary.test(value);
     59   return (isBinary || reIsOctal.test(value))
     60     ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
     61     : (reIsBadHex.test(value) ? NAN : +value);
     62 }
     63 
     64 module.exports = toNumber;