Страницы

Поиск по вопросам

среда, 12 декабря 2018 г.

parseInt(null, 24) === 23. Почему?

Каким образом преобразованные в число NaN и 24 трансформировались в 23?
for(var i = 1; i <= 36; i++) console.log(i, parseInt(null, i), parseInt("null", i));


Ответ

Простое совпадение.
parseInt(null, 24)
означает привести строку "null" (строку потому, что первый параметр, переданный parseInt() всегда конвертируется в строку) в число в системе счисления с основанием 24.
"n" в данном случае - 23 (потому что есть 9 цифр (кроме нуля) и "n" - 14 буква алфавита. 9 + 14 = 23).
"u" - 30. Уже выходит за пределы системы счисления с основанием 24. Поэтому возвращается 23, то есть число, полученное до этого момента.
Иными словами parseInt(null, 24) === parseInt("null", 24) === parseInt("n", 24) === 23
Отсюда и ответ - 23 === 23 - true
parseInt(null, m) === 23 всегда даст true, если m находится в пределе от 24 до 30.
Конкретно этот случай интересен лишь тем, что в первый параметр передается null как значение, а не как строка. Это вас и смутило. И null - это, пожалуй, единственное значение в языке, при конвертации в число с основанием 24 которого результат максимально приближен к самому основанию системы счисления.
Каким образом преобразованные в число NaN и 24 трансформировались в 23?
И насчет вот этой части. Это не NaN и 24 "трансформировались", а только null, которое при конвертации в число (с основанием 24+) средствами метода parseInt дает 23.
То есть метод parseInt принимает в качестве первого аргумента то, что нужно сконвертировать, а в качестве второго то, что будет является основанием системы счисления
Больше о самом методе здесь, о "системах счисления" тут (больше по соответствующему запросу в гугле; посмотрите также именно про "основание системы счисления"), другие ответы на этот вопрос (на английском, правда) здесь

Комментариев нет:

Отправить комментарий