parseInt возвращает неправильное значение
parseInt(16, 2)
Этот код вернет 1. Почему? Я был уверен что вернется NaN! Так как 6 не валидное значение.
Ответы (2 шт):
Из доков
Если функция
parseIntвстречает символ, не являющийся числом в указанной системе счисления, она пропускает этот и все последующие символы (даже, если они подходящие) и возвращает целое число, преобразованное из части строки, предшествовавшей этому символу.
То есть 1 в системе исчисления "2" - подошла, дальше 6 - не подошло, её пропускает и следующие за ней тоже.
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/parseInt
В документации написано:
string
Значение, которое необходимо проинтерпретировать. Если значение параметра string не принадлежит строковому типу, оно преобразуется в него (с помощью абстрактной операции ToString). Пробелы в начале строки не учитываются.
x = 16;
y = x.toString(); // получится '16'
z = parseInt(y, 2); // равносильно parseInt('16', 2) и выдаст 1
потому что все символы от символа не из словаря системы счисления ('0', '1') будут отброшены
parseInt('11ax1', 2) // = 3, потому что будет проанализировано только `11`
Опять же из указанной ссылки:
Если функция parseInt встречает символ, не являющийся числом в указанной системе счисления, она пропускает этот и все последующие символы (даже, если они подходящие) и возвращает целое число, преобразованное из части строки, предшествовавшей этому символу. parseInt отсекает дробную часть числа. Пробелы в начале и конце строки разрешены.