JSLint говорит "отсутствует параметр radix"; что я должен делать?
Я запустил JSLint для этого кода JavaScript, и он сказал:
Проблема в строке 32, символ 30: отсутствует параметр radix.
Это код вопроса:
imageIndex = parseInt(id.substring(id.length - 1))-1;
Что здесь не так?
12 ответов
Передача radix с помощью parseInt всегда хорошая практика.
parseInt(string, radix)
Для десятичной -
parseInt(id.substring(id.length - 1), 10)
Если параметр radix опущен, JavaScript предполагает следующее:
- Если строка начинается с "0x", основание будет 16 (шестнадцатеричное)
- Если строка начинается с "0", основание будет 8 (восьмеричное). Эта функция устарела
- Если строка начинается с любого другого значения, основание будет 10 (десятичное)
( Ссылка)
Чтобы избежать этого предупреждения, вместо использования:
parseInt("999", 10);
Вы можете заменить его на:
Number("999");
Обратите внимание, что parseInt и Number ведут себя по- разному, но в некоторых случаях один может заменить другой.
Я не правильно отвечаю на вопрос, но, думаю, имеет смысл пояснить, почему мы должны указывать основание.
В документации MDN мы можем прочитать, что:
Если основание не определено или 0 (или отсутствует), JavaScript предполагает следующее:
- [...]
- Если строка ввода начинается с "0", основание будет восемь (восьмеричное) или 10 (десятичное). Какое именно основание выбрано, зависит от реализации. ECMAScript 5 указывает, что используется 10 (десятичное число), но пока не все браузеры поддерживают это. По этой причине всегда указывайте основание при использовании parseInt.
- [...]
Источник: MDN parseInt ()
Вы можете отключить это правило, если хотите пропустить этот тест.
Вставка:
radix: false
Под "rules
"недвижимость в tslint.json
файл.
Не рекомендуется делать это, если вы не понимаете это исключение.
До ECMAScript 5 parseInt() также автоматически определял восьмеричные литералы, что вызывало проблемы, поскольку многие разработчики предполагали, что начальный 0 будет проигнорирован.
Итак, вместо:
var num = parseInt("071"); // 57
Сделай это:
var num = parseInt("071", 10); // 71
var num = parseInt("071", 8);
var num = parseFloat(someValue);
Добавление следующего в верхней части вашего файла JS скажет JSHint подавить предупреждение по основанию:
/*jshint -W065 */
Смотрите также: http://jshint.com/docs/
Просто добавьте свое собственное правило в.eslintrc, которое выглядит так
"radix": "off"
и вы будете свободны от этого ненужного предупреждения. Это для линтера eslint.
Я решил это с помощью +foo, чтобы преобразовать строку.
Имейте в виду, что это не очень хорошо для читабельности (грязное исправление).
console.log( +'1' )
// 1 (int)
Вы также можете просто добавить эту строку прямо над строкой parseInt:
// eslint-disable-next-line
Это отключит проверку eslint для следующей строки. Используйте это, если вам нужно пропустить только одну или две строки.
Просто поместите пустую строку в основную точку, потому что parseInt() принимает два аргумента:
parseInt (string, radix);
строка Значение для анализа. Если строковый аргумент не является строкой, он преобразуется в строку (используя абстрактную операцию ToString). Ведущие пробелы в строковом аргументе игнорируются.
radix Целое число от 2 до 36, представляющее основание (основание в математических системах счисления) вышеупомянутой строки. Укажите 10 для десятичной системы счисления, обычно используемой людьми. Всегда указывайте этот параметр, чтобы избежать путаницы читателя и гарантировать предсказуемое поведение. Разные реализации дают разные результаты, когда основание не указано, обычно значение по умолчанию равно 10.
imageIndex = parseInt (id.substring (id.length - 1)) - 1; imageIndex = parseInt(id.substring(id.length - 1), '')-1;
Как говорится в официальной документации ESLint :
[...] если код предназначен только для ES5-совместимых сред, передающих систему счисления 10, это может быть избыточным. В таком случае вы можете запретить использование такого основания.
Итак, при использовании ESLint добавьтеradix
в конфигурацию:
// .eslintrc.js
module.exports = {
rules: {
radix: ['error', 'as-needed'],
},
};
Вместо вызова substring
функция, которую вы могли бы использовать .slice()
imageIndex = parseInt(id.slice(-1)) - 1;
Здесь -1 в слайсе указывает, что начать слайс с последнего индекса.
Благодарю.