String.prototype.repeat()

La méthode repeat() construit et renvoie une nouvelle chaine de caractères qui contient le nombre de copie demandée de la chaine de caractères sur laquelle la méthode a été appelée, concaténées les unes aux autres.

Syntaxe

str.repeat(compte)

Paramètres

compte
Un nombre entier entre 0 and +∞ : [ 0, +∞[, indiquant le nombre de fois que la chaine de caractères doit être repétée dans la nouvelle chaine de caractères.

Valeur de retour

Une nouvelle chaîne de caractères composée du nombre indiqué de copies de la chaîne appelante.

Exceptions

  • RangeError : le nombre de répétition doit être positif.
  • RangeError : le nombre de répétition ne doit pas être infini et la taille de la chaîne résultante ne doit pas dépasser la taille maximale pour une chaîne de caractères.
RangeError
La compteur doit être positif et inférieur à l'infini.

Exemples

"abc".repeat(-1)     // RangeError
"abc".repeat(0)      // ""
"abc".repeat(1)      // "abc"
"abc".repeat(2)      // "abcabc"
"abc".repeat(3.5)    // "abcabcabc" (le compteur est converti en un nombre entier)
"abc".repeat(1/0)    // RangeError

({toString : () => "abc", repeat : String.prototype.repeat}).repeat(2)    
// "abcabc" (repeat() est une méthode générique)

Prothèse d'émulation (polyfill)

Cette méthode a été ajoutée dans la spécification ECMAScript 6 et peut ne pas être disponible dans toutes les implémentations de JavaScript. Cependant, il est possible d'émuler le comportement de String.prototype.repeat() grâce au fragment de code suivant :

if (!String.prototype.repeat) {
  String.prototype.repeat = function (count) {
    "use strict";
    if (this == null)
      throw new TypeError("ne peut convertir " + this + " en objet");
    var str = "" + this;
    count = +count;
    if (count != count)
      count = 0;
    if (count < 0)
      throw new RangeError("le nombre de répétitions doit être positif");
    if (count == Infinity)
      throw new RangeError("le nombre de répétitions doit être inférieur à l'infini");
    count = Math.floor(count);
    if (str.length == 0 || count == 0)
      return "";
    // En vérifiant que la longueur résultant est un entier sur 31-bit
    // cela permet d'optimiser l'opération.
    // La plupart des navigateurs (août 2014) ne peuvent gérer des
    // chaînes de 1 << 28 caractères ou plus. Ainsi :
    if (str.length * count >= 1 << 28)
      throw new RangeError("le nombre de répétitions ne doit pas dépasser la taille de chaîne maximale");
    var rpt = "";
    for (;;) {
      if ((count & 1) == 1)
        rpt += str;
      count >>>= 1;
      if (count == 0)
        break;
      str += str;
    }
    return rpt;
  }
}

Spécifications

Spécification État Commentaire
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'String.prototype.repeat' dans cette spécification.
Standard Première définition.
ECMAScript 2017 Draft (ECMA-262)
La définition de 'String.prototype.repeat' dans cette spécification.
Projet  

Compatibilité des navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
Support simple 41  24 (24) Pas de support Pas de support 9
Fonctionnalité Android Chrome pour Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Support simple Pas de support 36 24.0 (24) Pas de support Pas de support Pas de support

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : SphinxKnight, ea1000, tregagnon
 Dernière mise à jour par : SphinxKnight,