JSLint говорит «отсутствует параметр radix»; что я должен делать? - PullRequest
471 голосов
/ 19 октября 2011

Я запустил JSLint для этого кода JavaScript, и он сказал:

Проблема в строке 32, символ 30: отсутствует параметр radix.

Это код вопроса:

imageIndex = parseInt(id.substring(id.length - 1))-1;

Что здесь не так?

Ответы [ 10 ]

859 голосов
/ 19 октября 2011

Передача radix с помощью parseInt всегда полезна -

parseInt(string, radix)

Для десятичного числа -

parseInt(id.substring(id.length - 1), 10)

Если параметр radix опущен, JavaScript предполагает следующее:

  • Если строка начинается с "0x", основание будет 16 (шестнадцатеричное)
  • Если строка начинается с «0», основание будет 8 (восьмеричное). Эта функция устарела
  • Если строка начинается с любого другого значения, основание будет 10 (десятичное число)

( ссылка )

40 голосов
/ 13 апреля 2018

Чтобы избежать этого предупреждения, вместо использования:

parseInt("999", 10);

Вы можете заменить его на:

Number("999");


Обратите внимание, что parseInt и Number имеют различное поведение , но в некоторых случаях одно может заменить другое.

40 голосов
/ 17 декабря 2013

Я не правильно отвечаю на вопрос, но, думаю, имеет смысл пояснить , почему мы должны указать основание

В документации MDN мы можем прочитать, что:

Если основание не определено или равно 0 (или отсутствует), JavaScript предполагает следующее:

  • [...]
  • Если входная строка начинается с «0», основание будет восемь (восьмеричное) или 10 (десятичное). Какое именно основание выбрано, зависит от реализации. ECMAScript 5 указывает, что используется 10 (десятичное число), но пока не все браузеры поддерживают это. По этой причине всегда указывайте основание при использовании parseInt.
  • [...]

Источник: MDN parseInt ()

23 голосов
/ 29 августа 2016

Вы можете отключить это правило, если хотите пропустить этот тест.

Вставить:

radix: false

В свойстве "rules" в файле tslint.json.

Не рекомендуется делать это, если вы не понимаете это исключение.

21 голосов
/ 02 мая 2013

Добавление следующего в верхней части вашего файла JS скажет JSHint подавить предупреждение о радиксе:

/*jshint -W065 */

См. Также: http://jshint.com/docs/#options

4 голосов
/ 02 апреля 2018

Вы также можете просто добавить эту строку прямо над строкой parseInt:

// eslint-disable-next-line

Это отключит проверку eslint для следующей строки. Используйте это, если вам нужно пропустить только одну или две строки.

4 голосов
/ 16 февраля 2018

Я решил это, просто используя + foo для преобразования строки.

Имейте в виду, что он не очень удобен для чтения (грязное исправление).

console.log( +'1' )
// 1 (int)
2 голосов
/ 11 апреля 2018

Просто поместите пустую строку в основную точку, потому что parseInt () принимает два аргумента:

parseInt (string, radix);

строка Значение для разбора. Если строковый аргумент не является строкой, он преобразуется в строку (используя абстрактную операцию ToString). Начальные пробелы в строковом аргументе игнорируются.

радикс Целое число от 2 до 36, представляющее основание (основание в математических системах счисления) вышеупомянутой строки. Укажите 10 для десятичной системы счисления, обычно используемой людьми. Всегда указывайте этот параметр, чтобы избежать путаницы читателя и гарантировать предсказуемое поведение. Разные реализации дают разные результаты, когда основание не указано, обычно значение по умолчанию равно 10.

imageIndex = parseInt (id.substring (id.length - 1)) - 1;
imageIndex = parseInt(id.substring(id.length - 1), '')-1;

0 голосов
/ 05 июля 2019

Просто добавьте свое пользовательское правило в .eslintrc, которое выглядит так "radix": "off" и вы будете свободны от этого ненужного предупреждения. Это для Эслинт Линтер.

0 голосов
/ 15 марта 2019

Вместо вызова функции substring вы можете использовать .slice()

    imageIndex = parseInt(id.slice(-1)) - 1;

Здесь -1 в срезе указывает, что начинать срез с последнего индекса.

Спасибо.

...