Ignacio Vazquez-Abrams ma rację, ale zobaczmy dokładnie, jak to działa ...
Od 15.1.2.2 parseInt (string , radix):
Po wywołaniu funkcji parseInt podejmowane są następujące kroki:
- Niech inputString będzie ToString (ciąg).
- Niech S będzie nowo utworzonym podciągiem inputString składającym się z pierwszego znaku, który nie jest StrWhiteSpaceChar i wszystkich znaków następujących po tym znaku. (Innymi słowy, usuń wiodące białe spacje).
- Niech znak będzie 1.
- Jeśli S nie jest puste, a pierwszy znak S jest znakiem minus -, niech znak będzie −1.
- Jeśli S nie jest puste, a pierwszy znak S jest znakiem plus + lub znakiem minus -, usuń pierwszy znak z S.
- Niech R = ToInt32 (podstawa).
- Niech stripPrefix będzie prawdziwy.
- Jeśli R ≠ 0, to a. Jeśli R <2 lub R> 36, zwróć NaN. b. Jeśli R = 16, niech stripPrefix ma wartość false.
- W przeciwnym razie R = 0 a. Niech R = 10.
- Jeśli stripPrefix ma wartość true, to a. Jeśli długość S wynosi co najmniej 2, a pierwsze dwa znaki S mają albo „0x”, albo „0X”, usuń pierwsze dwa znaki z S i niech R = 16.
- Jeśli S zawiera dowolny znak, który nie jest cyfrą Rx, to niech Z będzie podciągiem S składającym się ze wszystkich znaków przed pierwszym takim znakiem; w przeciwnym razie niech Z będzie S.
- Jeśli Z jest puste, zwróć NaN.
- Niech matath nie będzie matematyczną liczbą całkowitą reprezentowaną przez Z w notacji Radix-R, używając liter AZ i az dla cyfr o wartościach od 10 do 35. (Jeżeli jednak R wynosi 10, a Z zawiera więcej niż 20 cyfr znaczących, każda znacząca cyfra po 20. może zostać zastąpiona cyfrą 0, zależnie od opcji implementacji; a jeśli R nie jest 2, 4, 8, 10, 16 lub 32, to matematyka może być zależnym od implementacji przybliżeniem liczby całkowitej matematycznej wartość reprezentowana przez Z w notacji radix-R).
- Niech liczba będzie wartością liczbową dla mathInt.
- Znak powrotu × liczba.
UWAGA parseInt może interpretować tylko wiodącą część ciągu jako wartość całkowitą; ignoruje wszelkie znaki, których nie można interpretować jako część notacji liczb całkowitych, i nie podano żadnych wskazówek, że takie znaki były ignorowane.
Istnieją tutaj dwie ważne części. Pogrubiłem ich obu. Przede wszystkim musimy dowiedzieć się, na czym polega toStringreprezentacja null. Informacje te znajdują się Table 13 — ToString Conversionsw rozdziale 9.8.0:

Świetnie, więc teraz wiemy, że wykonywanie toString(null)wewnętrznie daje 'null'ciąg. Świetnie, ale jak dokładnie obsługuje cyfry (znaki), które nie są poprawne w podanym podstawce?
Patrzymy wyżej 15.1.2.2i widzimy następującą uwagę:
Jeśli S zawiera dowolny znak, który nie jest cyfrą Rx, to niech Z będzie podciągiem S składającym się ze wszystkich znaków przed pierwszym takim znakiem; w przeciwnym razie niech Z będzie S.
Oznacza to, że obsługujemy wszystkie cyfry PRZED podaną podstawą i ignorujemy wszystko inne.
Zasadniczo robienie parseInt(null, 23)jest tym samym, co parseInt('null', 23). uPowoduje dwa l„s być ignorowane (mimo że są one częścią radix 23). Dlatego możemy tylko parsować n, dzięki czemu cała instrukcja jest synonimem parseInt('n', 23). :)
Tak czy inaczej, świetne pytanie!