Mozilla сообщает нам :
function parseInt преобразует свой первый аргумент в строку, анализирует его и возвращает целое число или NaN. Если не NaN, возвращаемое значение будет десятичным целочисленным представлением первого аргумента, принятого как число в указанном базисе (base). Например, радиус 10 указывает на преобразование из десятичного числа, 8 восьмеричных, 16 шестнадцатеричных и т. Д. Для радиусов выше 10 буквы алфавита указывают цифры больше 9. Например, для шестнадцатеричных чисел (основание 16) используются A-F.
blockquote>В спецификация , 15.1.2.2/1 сообщает нам, что преобразование в строку выполняется с использованием встроенного
ToString
, который (согласно 9.8) дает"null"
(не путать сtoString
, что"u"
!).Итак, давайте рассмотрим
parseInt("null", 24)
.Конечно, это не целочисленная строка base-24 целиком, но «n» - : decimal 23 .
Теперь разбор остановок после вычитания десятичной цифры 23, потому что
"u"
не найден в системе base-24:Если S содержит любой символ, который не является знаком radix-R, то пусть Z - подстрока S, состоящая из всех символов до первого такого символа; в противном случае пусть Z является S. [15.1.2.2/11]
blockquote>(И поэтому
parseInt(null, 23)
(и более низкие радиусы) дает вамNaN
, а не 23:"n"
не находится в системе base-23.)