--- title: Array.prototype.push() slug: Web/JavaScript/Reference/Global_Objects/Array/push translation_of: Web/JavaScript/Reference/Global_Objects/Array/push ---
Il metodo push()
aggiunge uno o più elementi alla fine di un array e ne restituisce la nuova lunghezza.
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]
arr.push([elemento1[, ...[, elementoN]]])
elementoN
La nuova proprietà {{jsxref("Array.length", "length")}} dell'oggetto su cui è stato richiamato il metodo.
Il metodo push
aggiunge valori all'array.
push
è 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 metodopush
si basa sulla proprietà length
per determinare da dove iniziare l'inserimento dei valori indicati. Se la proprietà length
non può essere convertita in un numero, l'indice utilizzato è 0. Ciò include la possibilità che length
sia inesistente, in tale caso length
verrà creata.
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.
Il seguente codice crea l'array sports
che contiene due elementi, poi aggiunge ulteriori due elementi allo stesso. La variabile total
contiene la nuova lunghezza dell'array.
var sports = ['calcio', 'baseball']; var total = sports.push('football americano', 'nuoto'); console.log(sports); // ['calcio', 'baseball', 'football americano', 'nuoto'] console.log(total); // 4
Questo esempio utilizza {{jsxref("Function.apply", "apply()")}} per aggiungere tutti gli elementi da un secondo array.
Non utilizzare questo metodo se il secondo array (moreVegs
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.
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']
Come accennato in precedenza, push
è intenzionalmente generica e possiamo usarla a nostro vantaggio. Array.prototype.push
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 call
su Array.prototype.push
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.
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
Si noti che anche se obj
non è un array, il metodo push
ha incrementato la proprietà di length
diobj
come se si trattasse di un array vero e proprio.
Specificazione | Stato | Commento |
---|---|---|
{{SpecName('ES3')}} | {{Spec2('ES3')}} | Definizione iniziale. Implementato in JavaScript 1.2. |
{{SpecName('ES5.1', '#sec-15.4.4.7', 'Array.prototype.push')}} | {{Spec2('ES5.1')}} | |
{{SpecName('ES6', '#sec-array.prototype.push', 'Array.prototype.push')}} | {{Spec2('ES6')}} | |
{{SpecName('ESDraft', '#sec-array.prototype.push', 'Array.prototype.push')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.builtins.Array.push")}}