HOWTO · JavaScript

JavaScript equivalente a Printf o String.Format

Este tutorial describe el reemplazo real de printf() en JavaScript

En esta página

JavaScript no incluye una función integrada printf o String.Format. Usa un literal de plantilla para insertar valores o expresiones en texto, Intl.NumberFormat para dar formato a números según una configuración regional y sprintf-js cuando necesites específicamente especificadores de formato al estilo de printf. console.log muestra valores en una consola; no crea una cadena con formato. Los ejemplos del literal de plantilla y de Intl.NumberFormat que aparecen a continuación se ejecutaron; el ejemplo de sprintf-js en línea no se incluyó en los casos de ejecución proporcionados.

Uso de literales de plantilla

Los literales de plantilla son la opción más sencilla para construir un mensaje a partir de valores conocidos. Rodea el texto con acentos graves e incluye cada variable o expresión dentro de ${...}. El ejemplo crea un saludo a partir de un nombre y un cálculo.

const name = "Alice";
const age = 30;
const greeting = `Hello, my name is ${name} and I am ${age} years old.`;
console.log(greeting);
Hello, my name is Alice and I am 30 years old.

Este método también admite cadenas multilínea y expresiones como ${price * quantity}. El texto resultante queda visible en el código y no hace falta instalar una dependencia de formato. Usa console.log(greeting) para inspeccionar o mostrar el valor durante el desarrollo; cuando pases datos a otra función o los guardes, usa la propia cadena greeting.

Uso del objeto Intl.NumberFormat

Para monedas, porcentajes y otros valores numéricos, usa Intl.NumberFormat. Aplica separadores de grupos, convenciones decimales y la posición de la moneda según la configuración regional que elijas. Da formato a un número, no a texto arbitrario.

const amount = 123456.789;
const formattedAmount = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD"
}).format(amount);
console.log(formattedAmount);
$123,456.79

Elige la configuración regional y la moneda según el contexto del usuario, en lugar de suponer que todos usan dólares estadounidenses. Por ejemplo, de-DE con EUR aplica las convenciones alemanas a una cantidad en euros. La puntuación exacta y la posición del símbolo dependen de la configuración regional, así que evita construir el importe concatenando un símbolo y un número por tu cuenta.

Uso de la biblioteca sprintf-js

Si resulta más fácil mantener una cadena de formato con marcadores de posición, instala el paquete sprintf-js con npm install sprintf-js e importa su función sprintf. El marcador %s acepta una cadena, mientras que %.1f da formato a un número con un dígito después del separador decimal.

Por ejemplo, si name vale "Bob" y score vale 95.5, la llamada sprintf("Player %s scored %.1f points", name, score) produce el mensaje Player Bob scored 95.5 points. En un proyecto CommonJS, obtén la función con const sprintf = require("sprintf-js").sprintf; en un módulo ES, impórtala con import { sprintf } from "sprintf-js". El paquete debe estar instalado en el proyecto para que funcione cualquiera de las dos importaciones.

Usa esta biblioteca cuando la propia cadena de formato sea útil, por ejemplo, para seguir una convención al estilo de printf. Para un mensaje breve con unos pocos valores, un literal de plantilla suele ser más fácil de leer. Evita añadir un método format a String.prototype: modificar un prototipo integrado puede entrar en conflicto con otro código, mientras que una biblioteca o una función auxiliar independiente mantiene explícito el comportamiento.

Conclusión

Elige la herramienta que corresponda al valor que quieres formatear. Los literales de plantilla combinan texto con variables y expresiones; Intl.NumberFormat permite presentar números según una configuración regional; y sprintf-js ofrece marcadores de posición al estilo de printf cuando necesitas esa sintaxis. JavaScript no tiene un equivalente integrado directo de printf o String.Format. console.log sirve para ver un valor en la consola, pero es distinto de crear la cadena.

Preguntas frecuentes

  1. ¿Cuál es el equivalente de printf en JavaScript?
    No hay un equivalente integrado. Usa un literal de plantilla para la interpolación habitual o sprintf-js si necesitas especificadores de formato al estilo de printf.

  2. ¿Cómo doy formato a un número como moneda?
    Llama a new Intl.NumberFormat(locale, { style: "currency", currency }).format(amount) y elige una configuración regional y una moneda adecuadas para el usuario.

  3. ¿Los literales de plantilla pueden ocupar varias líneas?
    Sí. Los saltos de línea dentro de los acentos graves forman parte de la cadena resultante.

  4. ¿console.log da formato a las cadenas como printf?
    No. console.log escribe valores en una consola y resulta útil para depurar; no es un formateador de cadenas de propósito general.

  5. ¿Qué método es más rápido?
    Aquí no hay mediciones que permitan establecer un orden de rendimiento. Elige según el resultado que necesites y mide el rendimiento en tu propia aplicación si la velocidad del formato es importante.