Ejecuté JSLint en este código JavaScript y decía:
Problema en la línea 32, carácter 30: Falta el parámetro de la raíz.
Este es el código en cuestión:
imageIndex = parseInt(id.substring(id.length - 1))-1;
¿Que esta mal aquí?
Ejecuté JSLint en este código JavaScript y decía:
Problema en la línea 32, carácter 30: Falta el parámetro de la raíz.
Este es el código en cuestión:
imageIndex = parseInt(id.substring(id.length - 1))-1;
¿Que esta mal aquí?
Respuestas:
Siempre es una buena práctica pasar radix con parseInt -
parseInt(string, radix)
Para decimal -
parseInt(id.substring(id.length - 1), 10)
Si se omite el parámetro radix, JavaScript asume lo siguiente:
( Referencia )
Redundant radix parameter
radix
argumento es un valor numérico, no una representación de cadena de un valor numérico, por lo que no hay una raíz para especificar.
Para evitar esta advertencia, en lugar de usar:
parseInt("999", 10);
Puede reemplazarlo por:
Number("999");
Tenga en cuenta que parseInt y Number tienen comportamientos diferentes , pero en algunos casos, uno puede reemplazar al otro.
parseInt
y Number
. Aquí hay una vieja prueba de rendimiento .
Number()
es 6 veces más rápido queparseInt()
No estoy respondiendo correctamente la pregunta, pero creo que tiene sentido aclarar por qué deberíamos especificar la raíz .
En la documentación de MDN podemos leer que:
Si la raíz está indefinida o 0 (o ausente), JavaScript asume lo siguiente:
Fuente: MDN parseInt ()
Agregar lo siguiente en la parte superior de su archivo JS le indicará a JSHint que suprima la advertencia de radix:
/*jshint -W065 */
Ver también: http://jshint.com/docs/#options
"-W065": true
, por ejemplo, en un .jshintrc
archivo.
Lo resolví simplemente usando el + foo, para convertir la cadena.
Tenga en cuenta que no es bueno para la legibilidad (corrección sucia).
console.log( +'1' )
// 1 (int)
También puede simplemente agregar esta línea justo encima de su línea parseInt:
// eslint-disable-next-line
Esto deshabilitará la comprobación de eslint para la siguiente línea. Use esto si solo necesita omitir una o dos líneas.
Simplemente coloque una cadena vacía en el lugar de la raíz, porque parseInt () toma dos argumentos:
parseInt (string, radix);
string El valor a analizar. Si el argumento de cadena no es una cadena, entonces se convierte en una cadena (usando la operación abstracta ToString). Los espacios en blanco iniciales en el argumento de cadena se ignoran.
radix Un número entero entre 2 y 36 que representa la raíz (la base en los sistemas de numeración matemática) de la cadena mencionada anteriormente. Especifique 10 para el sistema de numeración decimal comúnmente utilizado por los humanos. Siempre especifique este parámetro para eliminar la confusión del lector y garantizar un comportamiento predecible. Las diferentes implementaciones producen resultados diferentes cuando no se especifica una raíz, por lo general, el valor predeterminado es 10.
imageIndex = parseInt (id.substring (id.length - 1)) - 1;
imageIndex = parseInt(id.substring(id.length - 1), '')-1;
Simplemente agregue su regla personalizada en .eslintrc que se ve así
"radix": "off"
y estará libre de esta advertencia de falta de seguridad. Esto es para el eslint linter.
Antes de ECMAScript 5, parseInt () también autodetectaba los literales octales, lo que causaba problemas porque muchos desarrolladores suponían que se ignoraría un 0 inicial.
Entonces, en lugar de:
var num = parseInt("071"); // 57
Hacer esto:
var num = parseInt("071", 10); // 71
var num = parseInt("071", 8);
var num = parseFloat(someValue);