Ігнасіо Васкес-Абрамс правильний, але давайте побачимо, як саме це працює ...
Від 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, то a. Якщо R <2 або R> 36, то поверніть NaN. б. Якщо R ≠ 16, нехай falsePrefix буде хибним.
- Інше, R = 0 а. Нехай R = 10.
- Якщо stripPrefix вірно, то a. Якщо довжина S становить щонайменше 2, а перші два символи S або "0x", або "0X", тоді видаліть з S перші два символи та нехай R = 16.
- Якщо S містить будь-який символ, який не є цифрою Rx, R, то нехай Z є підрядком S, що складається з усіх символів перед першим таким символом; інакше нехай Z буде S.
- Якщо Z порожній, поверніть NaN.
- Нехай mathInt - це значення математичного цілого числа, яке представлено Z у позначенні radix-R, використовуючи букви AZ та az для цифр зі значеннями 10 - 35. (Однак, якщо R 10 і Z містить більше 20 значущих цифр, кожна значна цифра після 20-ї може бути замінена на 0 цифри за вибором реалізації; а якщо R не 2, 4, 8, 10, 16 або 32, то mathInt може бути наближеним до впровадження математичним цілим числом значення, яке представлено Z у позначенні радікс-R.)
- Нехай число є значенням числа для mathInt.
- Зворотний знак × номер.
ПРИМІТКА parseInt може інтерпретувати лише провідну частину рядка як ціле значення; він ігнорує будь-які символи, які не можна інтерпретувати як частину позначення цілого числа, і не вказується, що будь-які такі символи були проігноровані.
Тут є дві важливі частини. Я посмілив їх обох. Отже, перш за все, ми повинні з'ясувати, що таке toString
представництво null
. Нам потрібно переглянути Table 13 — ToString Conversions
в розділі 9.8.0 цю інформацію:
Чудово, тому тепер ми знаємо, що робити toString(null)
внутрішньо - це результат'null'
рядок. Чудово, але як саме він обробляє цифри (символи), які не відповідають дійсності в заданому радіусі?
Ми переглядаємо вище 15.1.2.2
та бачимо таке зауваження:
Якщо S містить будь-який символ, який не є цифрою Rx, R, то нехай Z є підрядком S, що складається з усіх символів перед першим таким символом; інакше нехай Z буде S.
Це означає, що ми обробляємо всі цифри PRIOR до заданого радіусу і ігноруємо все інше.
В основному, робити parseInt(null, 23)
те саме, що і parseInt('null', 23)
. u
Викликає два l
«S ігноруються (навіть якщо вони є частиною РАДІКС 23). Тому ми можемо лише розібратися n
, зробивши весь вислів синонімомparseInt('n', 23)
. :)
У будь-якому випадку, велике запитання!