#javascript
Каким образом преобразованные в число NaN и 24 трансформировались в 23? for(var i = 1; i <= 36; i++) console.log(i, parseInt(null, i), parseInt("null", i));
Ответы
Ответ 1
Простое совпадение. 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 принимает в качестве первого аргумента то, что нужно сконвертировать, а в качестве второго то, что будет является основанием системы счисления. Больше о самом методе здесь, о "системах счисления" тут (больше по соответствующему запросу в гугле; посмотрите также именно про "основание системы счисления"), другие ответы на этот вопрос (на английском, правда) здесь.
Комментариев нет:
Отправить комментарий