11/11/2021
En el mundo del desarrollo web con JavaScript, una de las tareas más comunes y fundamentales es la manipulación de datos. A menudo, recibimos información de fuentes externas, como formularios HTML, respuestas de API o parámetros de URL, en formato de cadena de texto (string). Sin embargo, para realizar operaciones matemáticas, comparaciones numéricas o validaciones, necesitamos convertir estas cadenas en números enteros (integers). Aunque pueda parecer una tarea sencilla, JavaScript ofrece varios métodos para lograrlo, cada uno con sus propias características y comportamientos que es crucial entender para evitar errores inesperados y escribir un código robusto.

Elegir el método incorrecto puede llevar a resultados sutilmente erróneos que son difíciles de depurar. Por ejemplo, ¿qué sucede si la cadena contiene caracteres no numéricos como '100px'? ¿O si es una cadena vacía? Cada técnica de conversión responde a estas preguntas de manera diferente. En este artículo exhaustivo, exploraremos en profundidad los métodos más populares para convertir una cadena a un entero en JavaScript, analizaremos sus diferencias, ventajas y desventajas, y te proporcionaremos las herramientas para que elijas siempre la mejor opción para tu caso de uso específico.
El Método Clásico: parseInt()
La función parseInt() es, sin duda, la herramienta más conocida y utilizada para esta tarea. Su función principal es analizar una cadena de texto y devolver un número entero. Sin embargo, su poder y su complejidad radican en sus detalles.
La sintaxis completa es parseInt(string, radix).
- string: La cadena que se va a analizar.
- radix: Un número entero entre 2 y 36 que representa la base del sistema numérico a utilizar. Por ejemplo, 10 para decimal (el sistema que usamos habitualmente), 2 para binario, 16 para hexadecimal, etc.
Es una práctica muy recomendada especificar siempre el parámetro radix con el valor 10. Si se omite, los navegadores modernos suelen asumir la base 10, pero versiones más antiguas podían interpretar cadenas que comenzaban con '0' como números octales (base 8), lo que llevaba a errores muy confusos. Por seguridad y claridad, siempre usa el radix.
Comportamiento de parseInt()
La característica más distintiva de parseInt() es que analiza la cadena de izquierda a derecha y se detiene en el primer carácter que no puede interpretar como parte del número. Esto puede ser tanto una ventaja como una desventaja.

Veamos algunos ejemplos de código:
// Caso ideal const num1 = parseInt("123", 10); console.log(num1); // Salida: 123 // Cadena con texto al final const num2 = parseInt("42px", 10); console.log(num2); // Salida: 42 (ignora 'px') // Cadena con espacios al principio const num3 = parseInt(" 99 ", 10); console.log(num3); // Salida: 99 (ignora los espacios) // Cadena que no empieza con un número const num4 = parseInt("Hola 50", 10); console.log(num4); // Salida: NaN // Usando una base diferente (hexadecimal) const num5 = parseInt("FF", 16); console.log(num5); // Salida: 255El resultado NaN significa "Not a Number" (No es un Número) y es lo que JavaScript devuelve cuando una operación numérica falla. Siempre es buena idea verificar si el resultado de una conversión es NaN usando la función isNaN().
El Conversor Estricto: Number()
Otra forma de convertir una cadena en un número es utilizando la función constructora Number(). A diferencia de parseInt(), este método es mucho más estricto. Para que la conversión sea exitosa, la cadena completa (ignorando espacios al principio y al final) debe ser un número válido.
Este método no solo convierte a enteros, sino que también puede manejar números de punto flotante (decimales).
Comportamiento de Number()
Si la cadena contiene cualquier carácter que no sea parte de una notación numérica válida (como 'px' o letras), Number() devolverá NaN. Esto lo hace ideal para la validación de entradas donde se espera que el usuario ingrese únicamente un número.
Ejemplos de código:
// Caso ideal const num1 = Number("123"); console.log(num1); // Salida: 123 // Maneja decimales const num2 = Number("123.45"); console.log(num2); // Salida: 123.45 // Falla con caracteres extra const num3 = Number("42px"); console.log(num3); // Salida: NaN // Cadena vacía const num4 = Number(""); console.log(num4); // Salida: 0 // Espacios en blanco const num5 = Number(" 99 "); console.log(num5); // Salida: 99Un detalle importante es que Number("") devuelve 0. Esto puede ser un comportamiento deseado o una fuente de errores, dependiendo del contexto de tu aplicación.

El Atajo Rápido: El Operador Unario Más (+)
Para los desarrolladores que buscan concisión, JavaScript ofrece un atajo ingenioso: el operador unario más (+). Colocar un signo de más delante de una variable de tipo cadena intenta convertirla a un número. Su comportamiento es prácticamente idéntico al de la función Number().
Es una técnica muy común en código minificado o entre desarrolladores experimentados por su brevedad, aunque puede resultar menos legible para los principiantes.
Comportamiento del Operador Unario
// Conversión simple const str = "250"; const num1 = +str; console.log(num1); // Salida: 250 // Conversión con decimales const num2 = +"75.5"; console.log(num2); // Salida: 75.5 // Falla de forma idéntica a Number() const num3 = +"100km"; console.log(num3); // Salida: NaN // Cadena vacía también devuelve 0 const num4 = +""; console.log(num4); // Salida: 0Tabla Comparativa: parseInt() vs. Number() vs. +
Para clarificar las diferencias sutiles pero importantes, aquí tienes una tabla comparativa con varias entradas de ejemplo.
| Entrada (String) | parseInt(entrada, 10) | Number(entrada) | +entrada | Comentarios |
|---|---|---|---|---|
"42" | 42 | 42 | 42 | Todos funcionan igual con cadenas numéricas limpias. |
"42.7" | 42 | 42.7 | 42.7 | parseInt trunca la parte decimal. |
"42px" | 42 | NaN | NaN | Solo parseInt extrae el número inicial. |
" 42 " | 42 | 42 | 42 | Todos manejan correctamente los espacios en blanco. |
"" | NaN | 0 | 0 | Comportamiento muy diferente para cadenas vacías. |
"Hola 42" | NaN | NaN | NaN | parseInt también falla si la cadena no empieza con un número. |
"0xFF" | 0 | 255 | 255 | Number y + reconocen notación hexadecimal, parseInt no sin el radix 16. |
Extraer Números de Cadenas Complejas
A veces, el número que necesitamos está incrustado dentro de una cadena más larga, como "El pedido número 459 ha sido procesado". En estos casos, los métodos anteriores no funcionarán directamente. Aquí es donde las expresiones regulares se convierten en nuestras mejores aliadas.
Podemos usar el método .match() de las cadenas para encontrar la primera secuencia de dígitos.

const texto = "El usuario con ID: 12345 ha iniciado sesión."; const expresionRegular = /\d+/; const resultadoMatch = texto.match(expresionRegular); // resultadoMatch será un array como ['12345', index: 18, input: '...', groups: undefined] let numeroExtraido = NaN; if (resultadoMatch) { numeroExtraido = parseInt(resultadoMatch[0], 10); } console.log(numeroExtraido); // Salida: 12345Este enfoque de dos pasos (extraer y luego convertir) es extremadamente potente y flexible para manejar datos del mundo real que no siempre vienen en un formato limpio.
Preguntas Frecuentes (FAQ)
¿Cuál método es el mejor para usar?
No hay un "mejor" método universal; la elección depende del contexto:
- Usa
parseInt(string, 10)cuando necesites extraer un número entero del principio de una cadena y no te importan los caracteres que vengan después (por ejemplo, al procesar valores CSS como "16px"). - Usa
Number(string)o el operador unario+cuando necesites validar que una cadena completa es un número (entero o decimal) y quieres un fallo claro (NaN) si no lo es. Son ideales para validar campos de formulario.
¿Cómo puedo convertir un número de vuelta a una cadena?
La conversión inversa es más sencilla. Puedes usar el método .toString() en una variable numérica (let miNumero = 123; let miString = miNumero.toString();) o concatenarla con una cadena vacía (let miString = "" + miNumero;).
¿Qué pasa con los números muy grandes?
JavaScript maneja todos los números como flotantes de doble precisión de 64 bits. Esto significa que hay un límite para el tamaño de los enteros que se pueden representar con precisión, definido por Number.MAX_SAFE_INTEGER. Para números más grandes, deberías usar el tipo de dato BigInt, que se crea añadiendo una 'n' al final del número (12345n) o usando la función BigInt("12345").
¿Cómo manejo correctamente los errores de conversión?
La mejor manera es comprobar el resultado de la conversión con la función isNaN(). No confíes en que el valor sea "falsy" (evalúe a falso en un contexto booleano), ya que 0 es un número válido pero es falsy.
let userInput = "abc"; let number = parseInt(userInput, 10); if (isNaN(number)) { console.log("La entrada no es un número válido. Por favor, inténtalo de nuevo."); } else { console.log("El número es:", number); }Conclusión
Convertir una cadena a un entero es una operación fundamental en JavaScript, y dominar sus matices te convertirá en un desarrollador más eficaz. Hemos visto que parseInt() ofrece flexibilidad para extraer números, mientras que Number() y el operador unario + proporcionan una validación estricta. Recuerda siempre especificar el radix en parseInt() y manejar el posible resultado NaN para crear aplicaciones fiables y sin errores. Al comprender las herramientas a tu disposición, puedes manejar con confianza cualquier dato que se te presente y asegurar que tus operaciones numéricas se basen en una base sólida y predecible.
Si quieres conocer otros artículos parecidos a Convertir String a Integer en JavaScript puedes visitar la categoría Juegos.
