Это решение быстрее, чем parseInt (), если вы анализируете строки десятичного целого числа длиной не более 20. Для некоторых браузеров вы все равно можете работать быстрее, чем parseInt (), до 33 цифр. Кроме того, вы все равно будете быстрее, чем автоматически.
Это потому, что parseInt () для браузера действительно требуется некоторое время, чтобы прогреться, поэтому, если вы используете только простой метод для анализа, вы бьете его некоторое время, пока он не догонит. Не используйте это для nodeJS. При запуске parseInt () из nodeJS время запуска намного меньше, чем при запуске из браузера.
45 - это знак «-» в ASCII, 43 - это знак «+» в ASCII. 48 - это «0». Только от 48 до 57 или 48 становятся 0 - 9 (в их порядке). Нет других чисел xor 48 дает 0-9.
Это вернет undefined, если строка не является допустимой десятичной целочисленной строкой или если строка пуста. Он выдает строку со значением «Не строка», если входные данные не имеют тип string.
var toNumber = function (input) {
if ( typeof input !== "string" ) throw "Not a string";
var length = input.length;
if ( length === 0 ) return;
var c1 = input.charCodeAt(0);
if ( c1 === 45 || c1 === 43 ){
if ( length === 1 ) return;
var start = 1;
} else {
var start = 0;
}
var out = 0, c;
while( start < length && input.charCodeAt(start) === 48 ) start++;
for ( ; start < length; start++){
c = input.charCodeAt(start) ^ 48;
if ( c > 9 ) return;
out = (out * 10) + c;
}
if ( c1 === 45 ) return out * -1;
return out;
}