JSLint dit "paramètre Radix manquant"; que dois-je faire?

J'ai couru JSLint sur ce code JavaScript et il a dit:

Problème à la ligne 32 caractère 30: paramètre Radix manquant.

C'est le code en question:

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

Qu'est-ce qui ne va pas ici?

403
demandé sur Mosh Feu 2011-10-19 13:04:00

8 réponses

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 ce qui suit:

  • Si la chaîne commence par "0x", la base 16 (hexadécimal)
  • 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)

731
répondu Jayendra 2015-03-30 01:49:01

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

Sur la documentation MDN, nous pouvons lire ceci:

Si radix est indéfini ou 0 (ou absent), JavaScript suppose ce qui suit:

  • [...]
  • Si la chaîne d'entrée commence par "0", La base est huit (octal) ou 10 (décimal). Exactement quelle base est choisie dépend de l'implémentation. ECMAScript 5 spécifie que 10 (décimal) est utilisé, mais pas tous les navigateurs supportent encore cela. Pour cette raison, spécifiez toujours une base lors de l'utilisation de parseInt.
  • [...]

Source: MDN parseInt()

34
répondu nmoliveira 2013-12-17 13:09:14

Ajouter ce qui suit au-dessus de votre fichier JS indiquera à JSHint de supprimer l'avertissement de base:

/*jshint -W065 */

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

22
répondu aleemb 2013-05-01 21:06:41

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

Insérer:

radix: false

Sous la propriété "rules " dans le fichier tslint.json.

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

17
répondu Spock 2016-12-30 09:36:02

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

parseInt("999", 10);

Vous pouvez le remplacer par:

Number("999");


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

16
répondu Zanon 2018-04-13 12:47:29

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

Gardez à l'esprit que ce n'est pas génial pour la lisibilité (correction sale).

console.log( +'1' )
// 1 (int)
4
répondu user2369834 2018-02-16 09:59:43

Vous pouvez aussi 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 ceci si vous avez seulement besoin de sauter une ou deux lignes.

3
répondu Rohit Nethi 2018-04-01 21:02:22

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

ParseInt (chaîne, base);

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

Radix Un entier entre 2 et 36 qui représente la base (la base dans les systèmes numériques mathématiques) de la chaîne mentionnée ci-dessus. Spécifiez 10 pour le système de chiffres 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. Différentes implémentations produisent des résultats différents lorsqu'une base n'est pas spécifiée, la valeur par défaut étant généralement 10.

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

2
répondu Ahmed.Dz 2018-04-11 02:59:32