Игнасио Васкес-Абрамс верен, но давайте точно увидим , как это работает ...
С 15.1.2.2 parseInt (string , radix)
:
Когда вызывается функция parseInt,
предпринимаются следующие шаги:
- Пусть inputString будет ToString (строка).
- Пусть S будет вновь созданной подстрокой inputString, состоящей из первого
персонаж, который не является
StrWhiteSpaceChar и все символы
после этого персонажа. (В других
слова, уберите начальные пробелы.)
- Пусть знак будет 1.
- Если S не пусто и первый символ S - знак минус -, пусть
знак будет -1.
- Если S не пусто, а первый символ S является знаком плюс + или
знак минус -, затем уберите первый
персонаж из S.
- Пусть R = ToInt32 (основание).
- Пусть stripPrefix будет истинным.
- Если R ≠ 0, то а. Если R <2 или R> 36, то вернуть NaN. б. Если R ≠ 16, пусть
stripPrefix быть ложным.
- Иначе, R = 0 а. Пусть R = 10.
- Если stripPrefix имеет значение true, тогда a. Если длина S не менее 2 и
первые два символа S либо
«0x» или «0X», затем удалите первый
два символа из S и пусть R = 16.
- Если S содержит любой символ, который не является цифрой радикс-R, то пусть Z будет
подстрока S, состоящая из всех
персонажи перед первым таким
персонаж; в противном случае пусть Z будет S.
- Если Z пусто, вернуть NaN.
- Пусть mathInt будет математическим целочисленным значением, которое представлено Z
в обозначениях radix-R, используя буквы
A-Z и a-z для цифр со значениями 10
до 35. (Однако, если R равен 10 и Z
содержит более 20 значимых
цифры, каждая значащая цифра после
20-й может быть заменен 0 цифрой,
по выбору реализации;
и если R не равен 2, 4, 8, 10, 16 или
32, то математика может быть
зависящее от реализации приближение
до математического целочисленного значения, которое
представлен Z в radix-R
нотации.)
- Пусть number будет числовым значением для mathInt.
- Обратный знак × номер.
ПРИМЕЧАНИЕ parseInt может интерпретировать только
ведущая часть строки как
целочисленное значение; он игнорирует любой
символы, которые нельзя интерпретировать
как часть обозначения целого числа,
и никаких указаний на то, что
такие символы были проигнорированы.
Здесь есть две важные части. Я смел их обоих. Итак, прежде всего, мы должны выяснить, что такое toString
представление null
. Нам нужно взглянуть на Table 13 — ToString Conversions
в разделе 9.8.0 для получения этой информации:
Отлично, теперь мы знаем, что выполнение toString(null)
внутренне дает строку 'null'
. Отлично, но как именно он обрабатывает цифры (символы), которые недопустимы в пределах предоставленного radix?
Мы смотрим выше на 15.1.2.2
и видим следующее замечание:
Если S содержит любой символ, который
не цифра радикс-R, тогда пусть Z будет
подстрока S, состоящая из всех
персонажи перед первым таким
персонаж; в противном случае пусть Z будет S.
Это означает, что мы обрабатываем все цифры PRIOR до указанного радиуса и игнорируем все остальное.
По сути, parseInt(null, 23)
- это то же самое, что и parseInt('null', 23)
. u
вызывает игнорирование двух l
(даже если они являются частью радиуса 23). Следовательно, мы можем анализировать только n
, делая весь оператор синонимом parseInt('n', 23)
. :)
В любом случае, отличный вопрос!