Использование Javascript parseInt() и параметра Radix

Кто-нибудь может объяснить, как работают функции parseInt() и что такое параметр Radix?

В качестве примера я пытаюсь разобраться с этим фрагментом кода:

var maxChars = parseInt( formField.attr('maxlength') ? formField.attr('maxlength') : counter.text() );

Можете ли вы также объяснить, как работает этот код? Почему formField.attr('maxlength') присутствует дважды? Я нахожу использование операторов здесь чертовски запутанным!

Как работает параметр Radix в этом примере?


person shrewdbeans    schedule 01.05.2012    source источник
comment
руководство непонятно?   -  person Quentin    schedule 01.05.2012
comment
В этом примере не указана система счисления... Все выражение внутри parseInt() представляет собой тернарный оператор, который возвращает максимальную длину, если она указана, или counter.text(), если она не указана.   -  person Michael Berkowski    schedule 01.05.2012
comment
В конце концов, все, что вы получаете от этого, это либо parseInt(formField.attr('maxlength')), либо parseInt(counter.text())   -  person Michael Berkowski    schedule 01.05.2012
comment
Квентин, я так понимаю, здесь не место для простых вопросов? Я постараюсь держать их подальше от этого веб-сайта, но иногда руководство может быть немного властным для новых программистов.   -  person shrewdbeans    schedule 01.05.2012
comment
Некоторые исследования приветствуются.   -  person Quentin    schedule 01.05.2012


Ответы (3)


radix — это другое имя для base, т. е. 2 для двоичного, 10 для десятичного, 16 для шестнадцатеричного, более подробно объясненное на Сайт Mozilla Developer Network.

В вашем примере параметр системы счисления отсутствует, поэтому интерпретатор вернется к поведению по умолчанию, которое обычно обрабатывает числа как десятичные, если только они не начинаются с нуля (восьмеричное) или 0x (шестнадцатеричное).

person Alnitak    schedule 01.05.2012
comment
Рад, что кто-то ответил на вопрос здесь. С каких пор нужно начинать с мануала? Дайте мне перерыв, вопрос был действительным и не должен был быть отвергнут. - person Honorable Chow; 28.05.2013
comment
Firefox, Chrome и IE 9+ обрабатывают parseInt("077") как parseInt("077", 10). IE8 и более ранние версии обрабатывают его как parseInt("077", 8) Вот почему вы всегда должны указывать основание. - person Juan Mendes; 13.08.2014
comment
@JuanMendes Я считаю, что ES5 не одобряет исходное поведение по умолчанию с восьмеричным значением для начального нуля. - person Alnitak; 13.08.2014
comment
@Alnitak Правильно ecma-international.org/ecma- 262/5.1/#sec-15.1.2.2 Я всегда буду использовать его для ясности (даже если вас не интересуют старые браузеры), поскольку 077 === 63 - person Juan Mendes; 13.08.2014
comment
@HonorableChow Вы должны посмотреть его, прежде чем задавать вопрос, разве это не часть должной осмотрительности, которую мы требуем от плакатов в SO. Сказав это, нет необходимости травить ОП. - person Juan Mendes; 14.08.2014
comment
Я поддерживаю то, что я сказал, чтение руководства не является действительным ответом. Поскольку любую проблему можно было бы решить, прочитав соответствующее руководство, этого сайта не существовало бы. - person Honorable Chow; 18.08.2014
comment
Javascript — матрешка-сюрприз. Какой странный язык. Но фактически возвращаемое int является основанием 10. нет? Или есть хоть база на int? Ваша первая фраза все объясняет. Почему кто-то использовал термин основание, заставляет меня задуматься. - person Pedro Rodrigues; 01.07.2020
comment
@PedroRodrigues абстрактное число не имеет внутренней основы (также известной как основание). Только когда они преобразуются в конкретную форму, которую люди могут прочитать, они приобретают ее. - person Alnitak; 01.07.2020

В сценарии ECMA 5, когда строка начинается с 0 и не указана система счисления, поведение по умолчанию является десятичным (в отличие от более ранних версий, в которых оно было восьмеричным).

Источник: parseInt() в сети разработчиков Mozilla

person Peter Machowski    schedule 04.06.2014

parseInt принимает два параметра, второй необязателен. Строка и основание.

String – это значение для анализа. Если предоставленное значение не является строкой, оно будет преобразовано в строку.

Основание — это целое число от 2 до 36, представляющее основание (основание в математических системах счисления) указанной выше строки.

В вашем фрагменте кода основание счисления не указано и предполагается, что оно равно 16 по умолчанию.

var maxChars = parseInt( formField.attr('maxlength') ? formField.attr('maxlength') : counter.text() );

Вы определяете переменную с именем «maxChars». Эта переменная эквивалентна оценке сокращенного оператора IF.

Вы получаете атрибут из переменной, которая, как ожидается, будет селектором «formField» с именем «maxLength». Значение будет возвращено как целое число, оно вернется к системе счисления по умолчанию.

Оператор IF проверяет, является ли возвращаемое значение истинным или ложным. 0, false, ectcetera приведет к тому, что значение переменной "maxChars" будет установлено в комбинированный текст "counters". ЕСЛИ это правда, это приведет к тому, что переменная будет установлена ​​​​как атрибут селектора «formField» с именем «maxLength».

formField.attr('maxlength')

Существует дважды, потому что один используется в оценке оператора IF, а другой используется в качестве значения, если условие в операторе IF имеет результат TRUE.

person Blake Basas    schedule 02.08.2015
comment
немного поздно, но Radix не указан, но по умолчанию он не всегда равен 16, и это предложение неверно из-за этой второй половины. это зависит от браузера и фактической передаваемой строки. А также, поскольку ES5 (как указано в комментариях в принятом ответе) обычно по умолчанию имеет значение decimal/10 - person Daemedeor; 09.10.2015