| var baseTrim = require('./_baseTrim'), | |
|     isObject = require('./isObject'), | |
|     isSymbol = require('./isSymbol'); | |
| 
 | |
| /** Used as references for various `Number` constants. */ | |
| var NAN = 0 / 0; | |
| 
 | |
| /** Used to detect bad signed hexadecimal string values. */ | |
| var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; | |
| 
 | |
| /** Used to detect binary string values. */ | |
| var reIsBinary = /^0b[01]+$/i; | |
| 
 | |
| /** Used to detect octal string values. */ | |
| var reIsOctal = /^0o[0-7]+$/i; | |
| 
 | |
| /** Built-in method references without a dependency on `root`. */ | |
| var freeParseInt = parseInt; | |
| 
 | |
| /** | |
|  * Converts `value` to a number. | |
|  * | |
|  * @static | |
|  * @memberOf _ | |
|  * @since 4.0.0 | |
|  * @category Lang | |
|  * @param {*} value The value to process. | |
|  * @returns {number} Returns the number. | |
|  * @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') { | |
|     return value; | |
|   } | |
|   if (isSymbol(value)) { | |
|     return NAN; | |
|   } | |
|   if (isObject(value)) { | |
|     var other = typeof value.valueOf == 'function' ? value.valueOf() : value; | |
|     value = isObject(other) ? (other + '') : other; | |
|   } | |
|   if (typeof value != 'string') { | |
|     return value === 0 ? value : +value; | |
|   } | |
|   value = baseTrim(value); | |
|   var isBinary = reIsBinary.test(value); | |
|   return (isBinary || reIsOctal.test(value)) | |
|     ? freeParseInt(value.slice(2), isBinary ? 2 : 8) | |
|     : (reIsBadHex.test(value) ? NAN : +value); | |
| } | |
| 
 | |
| module.exports = toNumber;
 |