HOWTO · JavaScript

JavaScript équivalent de Printf ou String.Format

Ce tutoriel décrit le remplacement réel de printf() en JavaScript

Sur cette page

JavaScript ne fournit pas de fonction intégrée printf ou String.Format. Utilisez un littéral de gabarit pour insérer des valeurs ou des expressions dans du texte courant, Intl.NumberFormat pour formater des nombres selon une locale, et sprintf-js si vous avez précisément besoin de spécificateurs de format de type printf. console.log affiche des valeurs dans une console ; il ne crée pas de chaîne formatée. Les exemples avec un littéral de gabarit et Intl.NumberFormat ci-dessous ont été exécutés ; l’exemple sprintf-js présenté dans le texte n’a pas été inclus dans les cas d’exécution fournis.

Utiliser les littéraux de gabarit

Les littéraux de gabarit sont le choix le plus simple pour construire un message à partir de valeurs connues. Encadrez le texte de caractères accent graves et placez chaque variable ou expression dans ${...}. L’exemple construit une salutation à partir d’un nom et d’un calcul.

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.

Cette méthode prend aussi en charge les chaînes multilignes et les expressions telles que ${price * quantity}. La chaîne obtenue reste visible dans le code source et ne nécessite aucune dépendance de formatage. Utilisez console.log(greeting) pour examiner ou afficher la valeur pendant le développement ; utilisez la chaîne greeting elle-même pour la transmettre à une autre fonction ou l’enregistrer.

Utiliser l’objet Intl.NumberFormat

Pour les devises, les pourcentages et d’autres valeurs numériques, utilisez Intl.NumberFormat. Selon la locale choisie, cet objet applique les séparateurs de groupes, les conventions décimales et le positionnement du symbole monétaire. Il formate un nombre, et non du texte quelconque.

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

Choisissez la locale et la devise en fonction du contexte de l’utilisateur au lieu de supposer que tout le monde utilise le dollar américain. Par exemple, de-DE avec EUR applique les conventions allemandes à un montant en euros. La ponctuation exacte et la position du symbole dépendent de la locale ; évitez donc de construire vous-même le texte d’une somme en accolant un symbole à un nombre.

Utiliser la bibliothèque sprintf-js

Si une chaîne de format avec des marqueurs de remplacement est plus facile à maintenir, installez le paquet sprintf-js avec npm install sprintf-js, puis importez sa fonction sprintf. Le marqueur %s accepte une chaîne, tandis que %.1f formate un nombre avec un chiffre après la virgule décimale.

Par exemple, si name vaut "Bob" et score vaut 95.5, l’appel sprintf("Player %s scored %.1f points", name, score) associe la chaîne au marqueur %s et le nombre au marqueur %.1f. Cet exemple sprintf-js n’a pas été exécuté dans les cas fournis. Dans un projet CommonJS, récupérez la fonction avec const sprintf = require("sprintf-js").sprintf ; dans un module ES, importez-la avec import { sprintf } from "sprintf-js". Le paquet doit être installé dans le projet pour que l’un ou l’autre de ces imports fonctionne.

Utilisez cette bibliothèque lorsque la chaîne de format elle-même est utile, par exemple pour respecter une convention de type printf. Pour un message court comportant quelques valeurs, un littéral de gabarit est généralement plus lisible. Évitez d’ajouter une méthode format à String.prototype : modifier un prototype intégré peut créer des conflits avec d’autres codes, tandis qu’une bibliothèque ou une fonction autonome rend le comportement explicite.

Conclusion

Choisissez l’outil adapté à la valeur à formater. Les littéraux de gabarit combinent du texte avec des variables et des expressions ; Intl.NumberFormat gère la présentation numérique selon la locale ; et sprintf-js fournit des marqueurs de remplacement de type printf lorsque cette syntaxe est nécessaire. JavaScript n’a pas d’équivalent intégré direct à printf ou String.Format. console.log permet d’afficher une valeur, mais cet affichage est distinct de la création d’une chaîne.

FAQ

  1. Quel est l’équivalent de printf en JavaScript ?
    Il n’existe pas d’équivalent intégré. Utilisez un littéral de gabarit pour les interpolations courantes, ou sprintf-js si vous avez besoin de spécificateurs de format de type printf.

  2. Comment formater un nombre en devise ?
    Appelez new Intl.NumberFormat(locale, { style: "currency", currency }).format(amount) en choisissant une locale et une devise adaptées à l’utilisateur.

  3. Les littéraux de gabarit peuvent-ils s’étendre sur plusieurs lignes ?
    Oui. Les sauts de ligne à l’intérieur des caractères accent graves font partie de la chaîne obtenue.

  4. console.log formate-t-il les chaînes comme printf ?
    Non. console.log écrit des valeurs dans une console et sert au débogage ; ce n’est pas un formateur de chaînes à usage général.

  5. Quelle méthode est la plus rapide ?
    Aucune mesure ne permet ici d’établir un classement des performances. Choisissez selon le résultat souhaité et mesurez les performances dans votre application si la vitesse de formatage est importante.