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