aboutsummaryrefslogtreecommitdiff
path: root/files/it/web/javascript/reference/global_objects/array/push/index.html
blob: ad34c3da2d7242fe77ffe506671fc1fec8ce87cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
---
title: Array.prototype.push()
slug: Web/JavaScript/Reference/Global_Objects/Array/push
translation_of: Web/JavaScript/Reference/Global_Objects/Array/push
---
<div>{{JSRef}}</div>

<p>Il metodo <code><strong>push()</strong></code> aggiunge uno o più elementi alla fine di un array e ne restituisce la nuova lunghezza.</p>

<pre class="brush: js notranslate">var numbers = [1, 2, 3];
numbers.push(4);

console.log(numbers); // [1, 2, 3, 4]

numbers.push(5, 6, 7);

console.log(numbers); // [1, 2, 3, 4, 5, 6, 7]
</pre>

<h2 id="Sintassi">Sintassi</h2>

<pre class="syntaxbox notranslate"><var>arr</var>.push([<var>elemento1</var>[, ...[, <var>elementoN</var>]]])</pre>

<h3 id="Parametri">Parametri</h3>

<dl>
 <dt><code>elemento<em>N</em></code></dt>
 <dd>Gli elementi da aggiungere alla fine dell'array.</dd>
</dl>

<h3 id="Valore_di_ritorno">Valore di ritorno</h3>

<p>La nuova proprietà {{jsxref("Array.length", "length")}} dell'oggetto su cui è stato richiamato il metodo.</p>

<h2 id="Descrizione">Descrizione</h2>

<p>Il metodo <code>push</code> aggiunge valori all'array.</p>

<p><code>push</code> è intenzionalmente generico. Questo metodo può essere utilizzato con {{jsxref("Function.call", "call()")}} o {{jsxref("Function.apply", "apply()")}} su oggetti che assomigliano a un array. Il metodo<code>push</code> si basa sulla proprietà <code>length</code> per determinare da dove iniziare l'inserimento dei valori indicati. Se la proprietà <code>length</code> non può essere convertita in un numero, l'indice utilizzato è 0. Ciò include la possibilità che <code>length</code> sia inesistente, in tale caso <code>length</code> verrà creata.</p>

<p>Gli unici oggetti nativi simili agli array sono {{jsxref("Global_Objects/String", "strings", "", 1)}}, anche se non adatti alle applicazioni di questo metodo, in quanto le stringhe sono immutabili.</p>

<h2 id="Esempi">Esempi</h2>

<h3 id="Aggiungere_elementi_a_un_array">Aggiungere elementi a un array</h3>

<p>Il seguente codice crea l'array <code>sports</code> che contiene due elementi, poi aggiunge ulteriori due elementi allo stesso. La variabile <code>total</code> contiene la nuova lunghezza dell'array.</p>

<pre class="brush: js notranslate">var sports = ['calcio', 'baseball'];
var total = sports.push('football americano', 'nuoto');

console.log(sports); // ['calcio', 'baseball', 'football americano', 'nuoto']
console.log(total); // 4
</pre>

<h3 id="Unire_due_arrays">Unire due arrays</h3>

<p>Questo esempio utilizza {{jsxref("Function.apply", "apply()")}} per aggiungere tutti gli elementi da un secondo array.</p>

<p><em>Non</em> utilizzare questo metodo se il secondo array (<code>moreVegs</code> in questo esempio) è molto grande, perché il numero massimo di parametri che una funzione può assumere è limitato nella pratica. Vedere {{jsxref("Function.apply", "apply()")}} per ulteriori dettagli.</p>

<pre class="brush: js notranslate">var vegetables = ['pastinaca', 'patata'];
var moreVegs = ['sedano', 'barbabietola'];

// Unire il secondo array nel primo
// Equivalente a vegetables.push('sedano', 'barbabietola');
Array.prototype.push.apply(vegetables, moreVegs);

console.log(vegetables); // ['pastinaca', 'patata', 'sedano', 'barbabietola']
</pre>

<h3 id="Utilizzo_di_un_oggetto_come_un_array">Utilizzo di un oggetto come un array</h3>

<p>Come accennato in precedenza, <code>push</code> è intenzionalmente generica e possiamo usarla a nostro vantaggio. <code>Array.prototype.push</code> può funzionare benissimo su un oggetto, come mostra questo esempio. Si noti che non creiamo un array per memorizzare la raccolta di oggetti. Al contrario, memorizziamo la raccolta sull'oggetto stesso e utilizziamo <code>call</code> su <code>Array.prototype.push</code> per ingannare il metodo e fargli pensare che siamo di fronte a un array, e funziona solo grazie al modo in cui JavaScript ci permette di stabilire il contesto di esecuzione come preferiamo.</p>

<pre class="brush: js notranslate">var obj = {
    length: 0,

    addElem: function addElem(elem) {
        // obj.length viene automaticamente incrementato
        // ogni volta che viene aggiunto un elemento.
        [].push.call(this, elem);
    }
};

// Aggiungiamo alcuni oggetti vuoti solo per illustrare.
obj.addElem({});
obj.addElem({});
console.log(obj.length);
// → 2
</pre>

<p>Si noti che anche se <code>obj</code> non è un array, il metodo <code>push</code> ha incrementato la proprietà di <code>length</code> di<code>obj</code> come se si trattasse di un array vero e proprio.</p>

<h2 id="Specificazioni">Specificazioni</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Specificazione</th>
   <th scope="col">Stato</th>
   <th scope="col">Commento</th>
  </tr>
  <tr>
   <td>{{SpecName('ES3')}}</td>
   <td>{{Spec2('ES3')}}</td>
   <td>Definizione iniziale. Implementato in JavaScript 1.2.</td>
  </tr>
  <tr>
   <td>{{SpecName('ES5.1', '#sec-15.4.4.7', 'Array.prototype.push')}}</td>
   <td>{{Spec2('ES5.1')}}</td>
   <td></td>
  </tr>
  <tr>
   <td>{{SpecName('ES6', '#sec-array.prototype.push', 'Array.prototype.push')}}</td>
   <td>{{Spec2('ES6')}}</td>
   <td></td>
  </tr>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-array.prototype.push', 'Array.prototype.push')}}</td>
   <td>{{Spec2('ESDraft')}}</td>
   <td></td>
  </tr>
 </tbody>
</table>

<h2 id="Compatibilità_di_Browser">Compatibilità di Browser</h2>

<div>
<div class="hidden">La tabella di compatibilità di questa pagina viene generata da dati strutturati. Se desideri contribuire ai dati, controlla <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> e invia una pull request.</div>

<p>{{Compat("javascript.builtins.Array.push")}}</p>
</div>

<h2 id="Guarda_anche">Guarda anche</h2>

<ul>
 <li>{{jsxref("Array.prototype.pop()")}}</li>
 <li>{{jsxref("Array.prototype.shift()")}}</li>
 <li>{{jsxref("Array.prototype.unshift()")}}</li>
 <li>{{jsxref("Array.prototype.concat()")}}</li>
</ul>