web-dev-qa-db-fra.com

JSLint dit "paramètre de base manquant"; que devrais-je faire?

J'ai exécuté JSLint sur ce code JavaScript et il a déclaré:

Problème à la ligne 32, caractère 30: paramètre de base manquant.

C'est le code en question:

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

Qu'est-ce qui ne va pas ici?

485
Mike Vierwind

C'est toujours une bonne pratique de passer radix avec parseInt -

parseInt(string, radix)

Pour décimal -

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

Si le paramètre radix est omis, JavaScript suppose que:

  • Si la chaîne commence par "0x", la base est 16 (hexadécimale)
  • Si la chaîne commence par "0", la base est 8 (octal). Cette fonctionnalité est obsolète
  • Si la chaîne commence par une autre valeur, la base est 10 (décimal)

( référence )

881
Jayendra

Pour éviter cet avertissement, au lieu d'utiliser:

parseInt("999", 10);

Vous pouvez le remplacer par:

Number("999");


Notez que parseInt et Number ont comportements différents , mais dans certains cas, l'un peut remplacer l'autre.

44
Zanon

Je ne réponds pas correctement à la question mais, je pense qu'il est logique de clarifier pourquoi nous devrions spécifier la base .

Sur la documentation MDN, on peut lire que:

Si la base est non définie ou égale à 0 (ou absente), JavaScript suppose que:

  • [...]
  • Si la chaîne d'entrée commence par "0", la base est égale à huit (octal) ou à 10 (décimal). Le radix choisi dépend de la mise en oeuvre. ECMAScript 5 indique que 10 (décimal) est utilisé, mais tous les navigateurs ne la prennent pas encore en charge. Pour cette raison, spécifiez toujours une base lorsque vous utilisez parseInt.
  • [...]

Source: MDN parseInt ()

40
nmoliveira

Vous pouvez désactiver cette règle si vous souhaitez ignorer ce test.

Insérer:

radix: false

Sous la propriété "rules" du fichier tslint.json.

Il n'est pas recommandé de faire cela si vous ne comprenez pas cette exception.

23
Spock

Ajouter ce qui suit en haut de votre fichier JS indiquera à JSHint de supprimer l'avertissement de base:

/*jshint -W065 */

Voir aussi: http://jshint.com/docs/#options

21
aleemb

Vous pouvez également simplement ajouter cette ligne juste au-dessus de votre ligne parseInt:

// eslint-disable-next-line

Cela désactivera la vérification eslint pour la ligne suivante. Utilisez cette option si vous ne devez ignorer qu'une ou deux lignes.

4
Rohit Nethi

Je l'ai résolu en utilisant simplement le + toto, pour convertir la chaîne.

Gardez à l'esprit que ce n'est pas excellent pour la lisibilité (solution sale).

console.log( +'1' )
// 1 (int)
4
user2369834

Il suffit de mettre une chaîne vide à la place de la base, car parseInt () prend deux arguments:

parseInt (chaîne, radix);

string La valeur à analyser. Si l'argument de chaîne n'est pas une chaîne, il est converti en chaîne (à l'aide de l'opération abstraite ToString). Les espaces de début dans l'argument de chaîne sont ignorés.

radix Un entier compris entre 2 et 36 qui représente le radix (la base dans les systèmes de nombres mathématiques) de la chaîne mentionnée ci-dessus. Spécifiez 10 pour le système de nombres décimaux couramment utilisé par les humains. Spécifiez toujours ce paramètre pour éliminer la confusion du lecteur et garantir un comportement prévisible. Des implémentations différentes produisent des résultats différents lorsqu'aucune base n'est spécifiée, généralement la valeur par défaut est 10.

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

2
Ahmed.Dz

Au lieu d'appeler la fonction substring, vous pouvez utiliser .slice()

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

Ici, -1 dans la tranche indique que commencer par la tranche à partir du dernier index.

Merci.

0
Daniel

Ajoutez simplement votre règle personnalisée dans .eslintrc qui ressemble à ceci "radix": "off" et vous serez libéré de cet avertissement eslint unnesesery. Ceci est pour le linter eslint.

0
Goran7777