|  | var isObject = require('./isObject'), | 
|  | isSymbol = require('./isSymbol'); | 
|  |  | 
|  | /** Used as references for various `Number` constants. */ | 
|  | var NAN = 0 / 0; | 
|  |  | 
|  | /** Used to match leading and trailing whitespace. */ | 
|  | var reTrim = /^\s+|\s+$/g; | 
|  |  | 
|  | /** 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 = value.replace(reTrim, ''); | 
|  | 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; |