diff options
Diffstat (limited to 'files/pt-br/web/javascript/reference/global_objects/string/repeat/index.html')
-rw-r--r-- | files/pt-br/web/javascript/reference/global_objects/string/repeat/index.html | 294 |
1 files changed, 294 insertions, 0 deletions
diff --git a/files/pt-br/web/javascript/reference/global_objects/string/repeat/index.html b/files/pt-br/web/javascript/reference/global_objects/string/repeat/index.html new file mode 100644 index 0000000000..94cdca3831 --- /dev/null +++ b/files/pt-br/web/javascript/reference/global_objects/string/repeat/index.html @@ -0,0 +1,294 @@ +--- +title: String.prototype.repeat() +slug: Web/JavaScript/Reference/Global_Objects/String/repeat +tags: + - JavaScript + - Prototype + - Referencia + - Repetir + - String + - metodo + - repeat() +translation_of: Web/JavaScript/Reference/Global_Objects/String/repeat +--- +<div>{{JSRef}}</div> + +<p>O método <strong><code>repeat()</code></strong> constrói e retorna uma nova string com um determinado número de cópias concatenadas da string original.</p> + +<h2 id="Sintaxe">Sintaxe</h2> + +<pre class="syntaxbox notranslate"><code><var>str</var>.repeat(<var>count</var>);</code> +</pre> + +<h3 id="Parâmetros">Parâmetros</h3> + +<dl> + <dt><code>count</code></dt> + <dd>Um número inteiro entre 0 e {{jsxref("Global_Objects/Number/POSITIVE_INFINITY", "+Infinity")}}, indicando o número de vezes que a string deve ser repetida.</dd> +</dl> + +<h3 id="Valor_retornado">Valor retornado</h3> + +<p>Uma nova string contendo o número especificado de cópias da string original.</p> + +<h3 id="Exceções">Exceções</h3> + +<ul> + <li>{{jsxref("Errors/Negative_repetition_count", "RangeError")}}: o número de repetições não pode ser negativo.</li> + <li>{{jsxref("Errors/Resulting_string_too_large", "RangeError")}}: o número de repetições deve ser menor que infinito e não deve ultrapassar o tamanho máximo da string.</li> +</ul> + +<h2 id="Exemplos">Exemplos</h2> + +<pre class="brush: js notranslate">'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) +</pre> + +<h2 id="Polyfill">Polyfill</h2> + +<p>O método <code>repeat()</code> 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 <code>String.prototype.repeat()</code>:</p> + +<pre class="brush: js notranslate">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 ''; + } + + // Ao 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; + } +} +</pre> + +<h4 id="Polyfill_ES5">Polyfill ES5</h4> + +<pre class="syntaxbox notranslate">//#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); + +// teste: +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); +*/ +</pre> + +<h4 id="Polyfill_ES6">Polyfill ES6</h4> + +<pre class="syntaxbox notranslate">//#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 + +);</pre> + +<h2 id="Especificações">Especificações</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Specification</th> + <th scope="col">Status</th> + <th scope="col">Comment</th> + </tr> + <tr> + <td>{{SpecName('ES2015', '#sec-string.prototype.repeat', 'String.prototype.repeat')}}</td> + <td>{{Spec2('ES2015')}}</td> + <td>Definição inicial.</td> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-string.prototype.repeat', 'String.prototype.repeat')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td></td> + </tr> + </tbody> +</table> + +<h2 id="Navegadores_compatíveis">Navegadores compatíveis</h2> + +<p class="hidden">A tabela de compatibilidade nesta página foi gerada a partir de dados estruturados. Se você quiser contribuir para esses dados, vá para <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> e nos envie uma pull request.</p> + +<p>{{Compat("javascript.builtins.String.repeat")}}</p> + +<h2 id="Veja_também">Veja também</h2> + +<ul> + <li>{{jsxref("String.prototype.concat()")}}</li> +</ul> |