JSLint говорит "отсутствует параметр radix"; что мне делать?

Я запустил JSLint в этом JavaScript-коде, и он сказал:

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

Это код, о котором идет речь:

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

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

+467
источник поделиться
10 ответов

Это всегда хорошая практика, чтобы передать radix с parseInt -

parseInt(string, radix)

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

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

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

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

(Reference)

+848
источник

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

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

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

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

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

+40
источник
другие ответы

Связанные вопросы


Похожие вопросы

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

parseInt("999", 10);

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

Number("999");


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

+40
источник

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

Вставить:

radix: false

В разделе "rules" в файле tslint.json.

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

+23
источник

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

/*jshint -W065 */

Смотрите также: http://jshint.com/docs/#options

+21
источник

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

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

console.log( +'1' )
// 1 (int)
+4
источник

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

// eslint-disable-next-line

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

+4
источник

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

parseInt (string, radix);

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

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

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

+2
источник

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

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

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

Благодарю.

0
источник

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

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос