2 var $ = require('../internals/export');
3 var global = require('../internals/global');
4 var uncurryThis = require('../internals/function-uncurry-this');
5 var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');
6 var parseInt = require('../internals/number-parse-int');
8 var INVALID_NUMBER_REPRESENTATION = 'Invalid number representation';
9 var INVALID_RADIX = 'Invalid radix';
10 var RangeError = global.RangeError;
11 var SyntaxError = global.SyntaxError;
12 var TypeError = global.TypeError;
13 var valid = /^[\da-z]+$/;
14 var charAt = uncurryThis(''.charAt);
15 var exec = uncurryThis(valid.exec);
16 var numberToString = uncurryThis(1.0.toString);
17 var stringSlice = uncurryThis(''.slice);
19 // `Number.fromString` method
20 // https://github.com/tc39/proposal-number-fromstring
21 $({ target: 'Number', stat: true }, {
22 fromString: function fromString(string, radix) {
25 if (typeof string != 'string') throw TypeError(INVALID_NUMBER_REPRESENTATION);
26 if (!string.length) throw SyntaxError(INVALID_NUMBER_REPRESENTATION);
27 if (charAt(string, 0) == '-') {
29 string = stringSlice(string, 1);
30 if (!string.length) throw SyntaxError(INVALID_NUMBER_REPRESENTATION);
32 R = radix === undefined ? 10 : toIntegerOrInfinity(radix);
33 if (R < 2 || R > 36) throw RangeError(INVALID_RADIX);
34 if (!exec(valid, string) || numberToString(mathNum = parseInt(string, R), R) !== string) {
35 throw SyntaxError(INVALID_NUMBER_REPRESENTATION);
37 return sign * mathNum;