O método repeat() constrói e retorna uma nova string com o determinado número de cópias concatenadas da string na qual ele foi chamado.

Sintaxe

str.repeat(count);

Parâmetros

count
Um número inteiro entre 0 e +∞: [0, +∞), indicando o número de vezes que uma string deve ser repetida na string recém-criada que será retornada.

Valor retornado

Uma nova string contendo o número especificado de cópias de determinada string.

Exceções

  • RangeError: o número de repetições não pode ser negativo.
  • RangeError: o número de repetições deve ser menor que infinito e não deve estourar o tamanho máximo de uma string.

Exemplos

'abc'.repeat(-1);   // RangeError
'abc'.repeat(0);    // ''
'abc'.repeat(1);    // 'abc'
'abc'.repeat(2);    // 'abcabc'
'abc'.repeat(3.5);  // 'abcabcabc' (o número será convertido para inteiro)
'abc'.repeat(1/0);  // RangeError

({ toString: () => 'abc', repeat: String.prototype.repeat }).repeat(2);
// 'abcabc' (repeat() é um método genérico)

Polyfill

Este método foi adicionado à especificação ECMAScript 2015 e pode ainda não estar disponível em todas as implementações do JavaScript. No entanto, você pode usar o seguinte polyfill para implementar o String.prototype.repeat():

if (!String.prototype.repeat) {
  String.prototype.repeat = function(count) {
    'use strict';
    if (this == null) {
      throw new TypeError('não é possível converter ' + this + ' para um objeto');
    }
    var str = '' + this;
    count = +count;
    if (count != count) {
      count = 0;
    }
    if (count < 0) {
      throw new RangeError('o núm. de repetições não pode ser negativo');
    }
    if (count == Infinity) {
      throw new RangeError('o núm. de repetições deve ser menor que infinito');
    }
    count = Math.floor(count);
    if (str.length == 0 || count == 0) {
      return '';
    }

    // Garantir que count seja um inteiro de 31 bits nos dá uma grande otimização
    // na parte principal. Porém, navegadores atuais (de agosto de 2014 pra cá)
    // não conseguem mais manipular strings de 1 << 28 chars ou maiores, então:
    if (str.length * count >= 1 << 28) {
      throw new RangeError('o núm. de repetições não deve estourar o tamanho máx. de uma string');
    }
    var rpt = '';
    for (var i = 0; i < count; i++) {
      rpt += str;
    }
    return rpt;
  }
}

Polyfill ES5

//#es5
'use strict';
(function(win){
 var typeOf=(function(w){var f=function f(x){return typeof(x)},o=w.Symbol,p;if(o && typeof(o)==='function' && typeof(o.iterator)==='symbol'){p=o.prototype;f=function(x){return x && x.constructor===o && x!==p?'symbol':typeof x}};return f})(win),
 exist=function(o,p,t){return p in o && typeOf(o[p])===t};
 (function(w){
    var o=w.String.prototype;
    if(!exist(o,'repeat','function')){o.repeat=(function(A,E){return function(n){var i=n>>0,s=this,l=s.length,j;if(i===0||l<1){s=''}else{j=268435456;if(i<0||i>=j||i*l>j){throw new RE('Invalidcountvalue')}else if(i>0){s=A(++i).join(s)}};return s}})(w.Array,w.RangeError)};
 })(win);
})(window);

//test:
console.clear();
console.log(
'abc'.repeat(false),//''
'abc'.repeat({}),//''
'abc'.repeat([]),//''
'abc'.repeat(['']),//''
'abc'.repeat([0]),//''
'abc'.repeat([0,1]),//''
'abc'.repeat([1,1]),//''
'abc'.repeat(0),//''
'abc'.repeat(.6),//''
'abc'.repeat(true),//'abc'
'abc'.repeat(1),//'abc'
'abc'.repeat(2),//'abcabc'
'abc'.repeat([2]),//'abcabc'
'abc'.repeat(3.5),//'abcabcabc'
''.repeat(2)//''
);
console.log(
'abc'.repeat(-Infinity),//RangeError: Invalid count value
'abc'.repeat(Infinity),//RangeError: Invalid count value
'abc'.repeat(1/0),//RangeError: Invalid count value
'abc'.repeat(-1)//RangeError: Invalid count value
);

/*
es5 src:
'use strict';
(function(win){

 var typeOf=(function(w){var f=function f(x){return typeof(x)},o=w.Symbol,p;if(o && typeof(o)==='function' && typeof(o.iterator)==='symbol'){p=o.prototype;f=function(x){return x && x.constructor===o && x!==p?'symbol':typeof x}};return f})(win),
 exist=function(o,p,t){return p in o && typeOf(o[p])===t};

 (function(w){
    var o=w.String.prototype;
    if(!exist(o,'repeat','function')){
        o.repeat=(function(A,E){
            return function(n){
                var i=n>>0,s=this,l=s.length,j;
                if(i===0||l<1){s=''}else{
                    j=268435456;
                    if(i<0||i>=j||i*l>j){throw new RE('Invalidcountvalue')}else if(i>0){s=A(++i).join(s)}
                };
                return s
            };
        })(w.Array,w.RangeError);
    };
    //..
 })(win);

})(window);
*/

Polyfill ES6

//#es6

(w=>{

    const typeOf=(o=>{let f=x=>typeof x;if(o && 'function'===typeof o){const s='symbol';if(s===typeof o.iterator){const p=o.prototype;f=x=>x && x.constructor===o && x!==p?s:typeof x}};return f})(w.Symbol),

    exist=(o,p,t)=>p in o && typeOf(o[p])===t;

    (o=>{

        if(!exist(o,'repeat','function')){const A=w.Array,E=w.RangeError;o.repeat=function(n){var i=n>>0,s='';if(i!==0){let t=this;const l=t.length;if(l!==0){if(i<0||i>=(t=268435456)||i*l>t){throw new E('Invalid count value')}else if(i>0){s=A(++i).join(t)}}};return s}};

    })(w.String.prototype);

})(window);

/*

es6 src:

(w=>{

    const typeOf=(o=>{let f=x=>typeof x;if(o && 'function'===typeof o){const s='symbol';if(s===typeof o.iterator){const p=o.prototype;f=x=>x && x.constructor===o && x!==p?s:typeof x}};return f})(w.Symbol),

    exist=(o,p,t)=>p in o && typeOf(o[p])===t;


    (o=>{

        if(!exist(o,'repeat','function')){

            const A=w.Array;

            o.repeat=function(n){var i=n>>0,s='';if(i!==0){let t=this;const l=t.length;if(l!==0){if(i<0||i>=(t=268435456)||i*l>t){throw new RangeError('Invalid count value')}else if(i>0){s=A(++i).join(t)}}};return s};

        };

        //..

    })(w.String.prototype);


})(window);

*/


//test:

console.clear();

console.log(

'abc'.repeat(false),//''

'abc'.repeat({}),//''

'abc'.repeat([]),//''

'abc'.repeat(['']),//''

'abc'.repeat([0]),//''

'abc'.repeat([0,1]),//''

'abc'.repeat([1,1]),//''

'abc'.repeat(0),//''

'abc'.repeat(.6),//''

'abc'.repeat(true),//'abc'

'abc'.repeat(1),//'abc'

'abc'.repeat(2),//'abcabc'

'abc'.repeat([2]),//'abcabc'

'abc'.repeat(3.5),//'abcabcabc'

''.repeat(2)//''

);

console.log(

'abc'.repeat(-Infinity),//RangeError: Invalid count value

'abc'.repeat(Infinity),//RangeError: Invalid count value

'abc'.repeat(1/0),//RangeError: Invalid count value

'abc'.repeat(-1)//RangeError: Invalid count value

);

Especificações

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'String.prototype.repeat' in that specification.
Padrão Definição inicial.
ECMAScript Latest Draft (ECMA-262)
The definition of 'String.prototype.repeat' in that specification.
Rascunho  

Compatibilidade de navegadores

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support41 Yes24 No Yes9
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support No36 Yes24 Yes9 Yes

Etiquetas do documento e colaboradores

Colaboradores desta página: liddack
Última atualização por: liddack,