aboutsummaryrefslogtreecommitdiff
path: root/files/pt-br/web/javascript/reference/operators/spread_operator
diff options
context:
space:
mode:
Diffstat (limited to 'files/pt-br/web/javascript/reference/operators/spread_operator')
-rw-r--r--files/pt-br/web/javascript/reference/operators/spread_operator/index.html200
1 files changed, 200 insertions, 0 deletions
diff --git a/files/pt-br/web/javascript/reference/operators/spread_operator/index.html b/files/pt-br/web/javascript/reference/operators/spread_operator/index.html
new file mode 100644
index 0000000000..4097266877
--- /dev/null
+++ b/files/pt-br/web/javascript/reference/operators/spread_operator/index.html
@@ -0,0 +1,200 @@
+---
+title: Spread operator
+slug: Web/JavaScript/Reference/Operators/Spread_operator
+tags:
+ - JavaScript
+ - Operador
+translation_of: Web/JavaScript/Reference/Operators/Spread_syntax
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>A sintaxe de propagação (<strong>Spread</strong>) permite que um objeto iterável, como um array ou string, seja expandida em locais onde zero ou mais argumentos (para chamadas de função) ou elementos (para literais de array) sejam esperados ou uma expressão de objeto seja expandida em locais onde zero ou mais pares de chave-valor (para literais de objeto) são esperados.</p>
+
+<h2 id="Sintaxe">Sintaxe</h2>
+
+<p>Para chamadas de função:</p>
+
+<pre class="brush: js">minhaFuncao(...objIteravel);
+</pre>
+
+<p>Para array literais:</p>
+
+<pre class="brush: js">[...objIteravel, 4, 5, 6]</pre>
+
+<p>Desestruturação:</p>
+
+<pre class="brush: js">[a, b, ...objIteravel] = [1, 2, 3, 4, 5];</pre>
+
+<h2 id="Exemplos">Exemplos</h2>
+
+<h3 id="Uma_melhor_aplicação">Uma melhor aplicação</h3>
+
+<p><strong>Exemplo:</strong> é comum usar {{jsxref( "Function.prototype.apply")}} em casos onde você quer usar um array como argumentos em uma função.</p>
+
+<pre class="brush: js">function minhaFuncao(x, y, z) { }
+var args = [0, 1, 2];
+minhaFuncao.apply(null, args);</pre>
+
+<p>Com o spread do ES2015 você pode agora escrever isso acima como:</p>
+
+<pre class="brush: js">function minhaFuncao(x, y, z) { }
+var args = [0, 1, 2];
+minhaFuncao(...args);</pre>
+
+<p>Qualquer argumento na lista de argumento pode usar a sintaxe spread e pode ser usado várias vezes.</p>
+
+<pre class="brush: js">function minhaFuncao(v, w, x, y, z) { }
+var args = [0, 1];
+minhaFuncao(-1, ...args, 2, ...[3]);</pre>
+
+<h3 id="Um_literal_array_mais_poderoso">Um literal array mais poderoso</h3>
+
+<p><strong>Exemplo:</strong>  Hoje se você tiver um array e quer criar um novo array com esse existente fazendo parte dele, a sintaxe literal do array não é mais suficiente e você deve voltar para o código imperativo, usando uma combinação de <code>push</code>, <code>splice</code>, <code>concat</code>, etc. Com a sintaxe spread isso se torna muito mais sucinto:</p>
+
+<pre class="brush: js">var partes = ['ombros', 'joelhos'];
+var letra = ['cabeca', ...partes, 'e', 'dedos']; // <span class="objectBox objectBox-array"><a class="objectLink "><span class="arrayLeftBracket">[</span></a><span class="objectBox objectBox-string">"</span></span>cabeca<span class="objectBox objectBox-array"><span class="objectBox objectBox-string">"</span><span class="arrayComma">, </span><span class="objectBox objectBox-string">"</span></span>ombros<span class="objectBox objectBox-array"><span class="objectBox objectBox-string">"</span><span class="arrayComma">, </span><span class="objectBox objectBox-string">"</span></span>joelhos<span class="objectBox objectBox-array"><span class="objectBox objectBox-string">"</span><span class="arrayComma">, </span><span class="objectBox objectBox-string">"e"</span><span class="arrayComma">, </span><span class="objectBox objectBox-string">"dedos"</span></span>]
+</pre>
+
+<p>Assim como em spread para listas de argumentos <code>...</code> pode ser usado em qualquer lugar no literal do array e pode ser usado várias vezes.</p>
+
+<h3 id="Apply_para_new">Apply para new</h3>
+
+<p><strong>Exemplo:</strong> No ES5 não é possível usar <code>new</code> com <code>apply.</code> (Em ES5 termos, <code>apply</code> faz uma <code>[[Call]]</code> e nao um <code>[[Construct]].</code>) Em ES2015 a sintaxe spread naturalmente suporta isso:</p>
+
+<pre class="brush: js">var camposData = lerCamposData(bancoDeDados);
+var d = new Date(...camposData);</pre>
+
+<h3 id="Um_push_melhor">Um push melhor</h3>
+
+<p><strong>Exemplo:</strong> {{jsxref("Global_Objects/Array/push", "push")}} é frequentemente usado para adicionar um array no final de um array existente. No ES5 isso é geralmente feito assim:</p>
+
+<pre class="brush: js">var arr1 = [0, 1, 2];
+var arr2 = [3, 4, 5];
+// Acrescenta todos itens do arr2 ao arr1
+Array.prototype.push.apply(arr1, arr2);</pre>
+
+<p>No ES2015 com spread isso se torna:</p>
+
+<pre class="brush: js">var arr1 = [0, 1, 2];
+var arr2 = [3, 4, 5];
+arr1.push(...arr2);</pre>
+
+<h2 id="Especificações">Especificações</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Especificação</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comentário</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-array-initializer')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Definido em várias seções da especificação: <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-array-initializer">Inicializador do array</a>, <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-argument-lists">Listas de argumento</a></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array-initializer')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Compatibilidade_com_browser">Compatibilidade com browser</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Operação spread em array literais</td>
+ <td>{{CompatChrome("46")}}</td>
+ <td>{{ CompatGeckoDesktop("16") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>7.1</td>
+ </tr>
+ <tr>
+ <td>Operação spread em chamadas de função</td>
+ <td>{{CompatChrome("46")}}</td>
+ <td>{{ CompatGeckoDesktop("27") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>7.1</td>
+ </tr>
+ <tr>
+ <td>Operação spread em desestruturação</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatGeckoDesktop("34") }}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Android Webview</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ <th>Chrome for Android</th>
+ </tr>
+ <tr>
+ <td>Operação spread em array literais</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("46")}}</td>
+ <td>{{ CompatGeckoMobile("16") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>8</td>
+ <td>{{CompatChrome("46")}}</td>
+ </tr>
+ <tr>
+ <td>Operação spread em chamadas de função</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("46")}}</td>
+ <td>{{ CompatGeckoMobile("27") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>8</td>
+ <td>{{CompatChrome("46")}}</td>
+ </tr>
+ <tr>
+ <td>Operação spread em desestruturação</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatGeckoDesktop("34") }}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Veja_também">Veja também</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/rest_parameters">Parâmetros rest</a></li>
+</ul>