aboutsummaryrefslogtreecommitdiff
path: root/files/it/web/javascript/reference/operators/spread_syntax
diff options
context:
space:
mode:
authorRyan Johnson <rjohnson@mozilla.com>2021-04-29 16:16:42 -0700
committerGitHub <noreply@github.com>2021-04-29 16:16:42 -0700
commit95aca4b4d8fa62815d4bd412fff1a364f842814a (patch)
tree5e57661720fe9058d5c7db637e764800b50f9060 /files/it/web/javascript/reference/operators/spread_syntax
parentee3b1c87e3c8e72ca130943eed260ad642246581 (diff)
downloadtranslated-content-95aca4b4d8fa62815d4bd412fff1a364f842814a.tar.gz
translated-content-95aca4b4d8fa62815d4bd412fff1a364f842814a.tar.bz2
translated-content-95aca4b4d8fa62815d4bd412fff1a364f842814a.zip
remove retired locales (#699)
Diffstat (limited to 'files/it/web/javascript/reference/operators/spread_syntax')
-rw-r--r--files/it/web/javascript/reference/operators/spread_syntax/index.html257
1 files changed, 0 insertions, 257 deletions
diff --git a/files/it/web/javascript/reference/operators/spread_syntax/index.html b/files/it/web/javascript/reference/operators/spread_syntax/index.html
deleted file mode 100644
index 9c300f9257..0000000000
--- a/files/it/web/javascript/reference/operators/spread_syntax/index.html
+++ /dev/null
@@ -1,257 +0,0 @@
----
-title: Spread syntax
-slug: Web/JavaScript/Reference/Operators/Spread_syntax
-tags:
- - ECMAScript 2015
- - Iterator
- - JavaScript
- - Referenza
-translation_of: Web/JavaScript/Reference/Operators/Spread_syntax
----
-<div>{{jsSidebar("Operators")}}</div>
-
-<p>La <strong>Spread syntax</strong> consente un iterabile come un'espressione di un array o una stringa da espandere in punti in cui sono previsti zero o più argomenti (per chiamate di funzione) o elementi (per letterali di array) o un'espressione di oggetto da espandere in posizioni dove zero o più sono previste coppie di valori (per valori letterali oggetto)..</p>
-
-<div>{{EmbedInteractiveExample("pages/js/expressions-spreadsyntax.html")}}</div>
-
-
-
-<h2 id="Sintassi">Sintassi</h2>
-
-<p>Per chiamate di funzione:</p>
-
-<pre class="syntaxbox">myFunction(...iterableObj);
-</pre>
-
-<p>Per letterali di un array o stringhe:</p>
-
-<pre class="syntaxbox">[...iterableObj, '4', 'five', 6];</pre>
-
-<p>Per gli oggetti letterali (novità in ECMAScript 2018):</p>
-
-<pre class="syntaxbox">let objClone = { ...obj };</pre>
-
-<h2 id="Esempi">Esempi</h2>
-
-<h3 id="Spread_nelle_chiamate_delle_funzioni">Spread nelle chiamate delle funzioni</h3>
-
-<h4 id="Sostituire_apply()">Sostituire <code>apply()</code></h4>
-
-<p>È comune utilizzare {{jsxref("Function.prototype.apply()")}} nei casi in cui vuoi utilizzare gli elementi di un array come argomenti di una funzione.</p>
-
-<pre class="brush: js">function myFunction(x, y, z) { }
-var args = [0, 1, 2];
-myFunction.apply(null, args);</pre>
-
-<p>Con la spread syntax può essere scritto come:</p>
-
-<pre class="brush: js">function myFunction(x, y, z) { }
-var args = [0, 1, 2];
-myFunction(...args);</pre>
-
-<p>Qualsiasi argomento nell'elenco di argomenti può utilizzare la spread syntax e può essere utilizzato più volte.</p>
-
-<pre class="brush: js">function myFunction(v, w, x, y, z) { }
-var args = [0, 1];
-myFunction(-1, ...args, 2, ...[3]);</pre>
-
-<h4 id="Apply_for_new">Apply for <code>new</code></h4>
-
-<p>When calling a constructor with {{jsxref("Operators/new", "new")}} it's not possible to <strong>directly</strong> use an array and <code>apply</code> (<code>apply</code> does a <code>[[Call]]</code> and not a <code>[[Construct]]</code>). However, an array can be easily used with <code>new</code> thanks to spread syntax:</p>
-
-<pre class="brush: js">var dateFields = [1970, 0, 1]; // 1 Jan 1970
-var d = new Date(...dateFields);
-</pre>
-
-<p>To use new with an array of parameters without spread syntax, you would have to do it <strong>indirectly</strong> through partial application:</p>
-
-<pre class="brush: js">function applyAndNew(constructor, args) {
- function partial () {
- return constructor.apply(this, args);
- };
- if (typeof constructor.prototype === "object") {
- partial.prototype = Object.create(constructor.prototype);
- }
- return partial;
-}
-
-
-function myConstructor () {
- console.log("arguments.length: " + arguments.length);
- console.log(arguments);
- this.prop1="val1";
- this.prop2="val2";
-};
-
-var myArguments = ["hi", "how", "are", "you", "mr", null];
-var myConstructorWithArguments = applyAndNew(myConstructor, myArguments);
-
-console.log(new myConstructorWithArguments);
-// (internal log of myConstructor): arguments.length: 6
-// (internal log of myConstructor): ["hi", "how", "are", "you", "mr", null]
-// (log of "new myConstructorWithArguments"): {prop1: "val1", prop2: "val2"}</pre>
-
-<h3 id="Spread_in_array_literals">Spread in array literals</h3>
-
-<h4 id="A_more_powerful_array_literal">A more powerful array literal</h4>
-
-<p>Without spread syntax, to create a new array using an existing array as one part of it, the array literal syntax is no longer sufficient and imperative code must be used instead using a combination of {{jsxref("Array.prototype.push", "push()")}}, {{jsxref("Array.prototype.splice", "splice()")}}, {{jsxref("Array.prototype.concat", "concat()")}}, etc. With spread syntax this becomes much more succinct:</p>
-
-<pre class="brush: js">var parts = ['shoulders', 'knees'];
-var lyrics = ['head', ...parts, 'and', 'toes'];
-// ["head", "shoulders", "knees", "and", "toes"]
-</pre>
-
-<p>Just like spread for argument lists, <code>...</code> can be used anywhere in the array literal and it can be used multiple times.</p>
-
-<h4 id="Copiare_un_array">Copiare un array</h4>
-
-<pre class="brush: js">var arr = [1, 2, 3];
-var arr2 = [...arr]; // like arr.slice()
-arr2.push(4);
-
-// arr2 becomes [1, 2, 3, 4]
-// arr remains unaffected
-</pre>
-
-<div class="blockIndicator note">
-<p><strong>Note:</strong> La spread syntax diventa effettivamente un livello profondo durante la copia di un array. Pertanto, potrebbe non essere adatto per copiare arrau multidimensionali come mostra il seguente esempio (è lo stesso con {{jsxref("Object.assign()")}} e spread syntax).</p>
-</div>
-
-<pre class="brush: js">var a = [[1], [2], [3]];
-var b = [...a];
-b.shift().shift(); // 1
-// Adesso anche l'array a è influenzato: [[], [2], [3]]
-</pre>
-
-<h4 id="Un_modo_migliore_per_concatenare_gli_array">Un modo migliore per concatenare gli array</h4>
-
-<p>{{jsxref("Array.prototype.concat()")}} è spesso usato per concatenare un array alla fine di un array esistente. Senza la spread syntax questo è fatto così:</p>
-
-<pre class="brush: js">var arr1 = [0, 1, 2];
-var arr2 = [3, 4, 5];
-// Append all items from arr2 onto arr1
-arr1 = arr1.concat(arr2);</pre>
-
-<p>Con la spread syntax questo diventa:</p>
-
-<pre class="brush: js">var arr1 = [0, 1, 2];
-var arr2 = [3, 4, 5];
-arr1 = [...arr1, ...arr2]; // arr1 is now [0, 1, 2, 3, 4, 5]
-</pre>
-
-<p>{{jsxref("Array.prototype.unshift()")}} è spesso usato per inserire un array di valori all'inizio di un array esistente. Senza la spread syntax questo è fatto così:</p>
-
-<pre class="brush: js">var arr1 = [0, 1, 2];
-var arr2 = [3, 4, 5];
-// Spostare all'inizio tutti gli elementi da arr2 a arr1
-Array.prototype.unshift.apply(arr1, arr2) // arr1 ora è [3, 4, 5, 0, 1, 2]</pre>
-
-
-
-<p>Con la spread syntax questo diventa:</p>
-
-
-
-<pre class="brush: js">var arr1 = [0, 1, 2];
-var arr2 = [3, 4, 5];
-arr1 = [...arr2, ...arr1]; // arr1 is now [3, 4, 5, 0, 1, 2]
-</pre>
-
-<div class="blockIndicator note">
-<p><strong>Note</strong>: A differenza di <code>unshift()</code>, questo crea un nuovo <code>arr1</code>, e non modifica l'array originale <code>arr1</code>.</p>
-</div>
-
-<h3 id="Spread_in_object_literals">Spread in object literals</h3>
-
-<p>The <a href="https://github.com/tc39/proposal-object-rest-spread">Rest/Spread Properties for ECMAScript</a> proposal (stage 4) adds spread properties to <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer">object literals</a>. It copies own enumerable properties from a provided object onto a new object.</p>
-
-<p>Lo Shallow-cloning (escluso il prototipo) o fusione di oggetti è ora possibile usando una sintassi più breve di {{jsxref("Object.assign()")}}.</p>
-
-<pre class="brush: js">var obj1 = { foo: 'bar', x: 42 };
-var obj2 = { foo: 'baz', y: 13 };
-
-var clonedObj = { ...obj1 };
-// Object { foo: "bar", x: 42 }
-
-var mergedObj = { ...obj1, ...obj2 };
-// Object { foo: "baz", x: 42, y: 13 }</pre>
-
-<p>Nota che {{jsxref("Object.assign()")}} attiva i <a href="/en-US/docs/Web/JavaScript/Reference/Functions/set">setters</a> mentre la spread syntax non lo fa.</p>
-
-<p>Nota che non è possibile sostituire o imitare la funzione {{jsxref("Object.assign()")}}:</p>
-
-<pre class="brush: js">var obj1 = { foo: 'bar', x: 42 };
-var obj2 = { foo: 'baz', y: 13 };
-const merge = ( ...objects ) =&gt; ( { ...objects } );
-
-var mergedObj = merge ( obj1, obj2);
-// Object { 0: { foo: 'bar', x: 42 }, 1: { foo: 'baz', y: 13 } }
-
-var mergedObj = merge ( {}, obj1, obj2);
-// Object { 0: {}, 1: { foo: 'bar', x: 42 }, 2: { foo: 'baz', y: 13 } }</pre>
-
-<p>Nell'esempio precedente, la spread syntax non funziona come previsto: estende una serie di argomenti nel letterale dell'oggetto, a causa del parametro rest.</p>
-
-<h3 id="Solo_per_iterabili">Solo per iterabili</h3>
-
-<p>La spread syntax (diversa dal caso delle spread properties) può essere applicata solo agli oggetti <a href="/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator">iterabili</a>:</p>
-
-<pre class="brush: js">var obj = {'key1': 'value1'};
-var array = [...obj]; // TypeError: obj non è iterabile
-</pre>
-
-<h3 id="Diffusione_con_molti_valori">Diffusione con molti valori</h3>
-
-<p>Quando si utilizza la sintassi di diffusione per le chiamate di funzione, tenere presente la possibilità di superare il limite di lunghezza dell'argomento del motore JavaScript. Vedi {{jsxref("Function.prototype.apply", "apply()")}} per maggiori dettagli.</p>
-
-<h2 id="Rest_syntax_(parametri)">Rest syntax (parametri)</h2>
-
-<p>La Rest syntax sembra esattamente come la spread syntax, ma è usata per destrutturare array e oggetti. In un certo senso, la Rest syntax è l'opposto della spread syntax: spread 'espande' un array nei suoi elementi, mentre la rest syntax raccoglie più elementi e li 'condensa' in un singolo elemento. Vedi <a href="/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/rest_parameters">rest parameters.</a></p>
-
-<h2 id="Specifications">Specifications</h2>
-
-<table class="standard-table">
- <thead>
- <tr>
- <th scope="col">Specification</th>
- <th scope="col">Status</th>
- <th scope="col">Comment</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>{{SpecName('ES2015', '#sec-array-initializer')}}</td>
- <td>{{Spec2('ES2015')}}</td>
- <td>Definito in diverse sezioni della specifica: <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-array-initializer">Array Initializer</a>, <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-argument-lists">Argument Lists</a></td>
- </tr>
- <tr>
- <td>{{SpecName('ES2018', '#sec-object-initializer')}}</td>
- <td>{{Spec2('ES2018')}}</td>
- <td>Definito in <a href="http://www.ecma-international.org/ecma-262/9.0/#sec-object-initializer">Object Initializer</a></td>
- </tr>
- <tr>
- <td>{{SpecName('ESDraft', '#sec-array-initializer')}}</td>
- <td>{{Spec2('ESDraft')}}</td>
- <td>Nessun cambiamento.</td>
- </tr>
- <tr>
- <td>{{SpecName('ESDraft', '#sec-object-initializer')}}</td>
- <td>{{Spec2('ESDraft')}}</td>
- <td>Nessun cambiamento.</td>
- </tr>
- </tbody>
-</table>
-
-<h2 id="Compatibilità_con_i_browser">Compatibilità con i browser</h2>
-
-
-
-<p>{{Compat("javascript.operators.spread")}}</p>
-
-<h2 id="Vedi_anche">Vedi anche</h2>
-
-<ul>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/rest_parameters">Rest parameters</a> (anche ‘<code>...</code>’)</li>
- <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply">fn.apply</a> (anche ‘<code>...</code>’)</li>
-</ul>