Gli array hanno una proprietà "length" per impostazione predefinita.Aggiungi proprietà a javascript array
Posso aggiungere proprietà personalizzate?
Senza dover fare loro oggetti
Gli array hanno una proprietà "length" per impostazione predefinita.Aggiungi proprietà a javascript array
Posso aggiungere proprietà personalizzate?
Senza dover fare loro oggetti
Sicuro.
var arr = [1,2,3,4,5];
arr.prop = 'value';
Array sono già oggetti in JavaScript - hanno solo alcune caratteristiche extra e una sintassi letterale speciale.
la mia proprietà verrà iterata con il resto degli elementi? perché in console.log non lo vedo con testo opaco come "length" – ellabeauty
Verranno iterati quando si usa 'for (var key in arr)'. Ma questo è qualcosa che non dovresti usare sugli array in ogni caso, quindi non dovrebbe essere un problema per te. A 'for (var i = 0; i
se si usa un ciclo 'for in', la proprietà sarà iterato. In un normale ciclo 'for', non lo sarà, dal momento che accederai a ciascun membro solo dal suo indice di array. Inoltre, non verrà iterato da metodi ES5 array nativi come 'forEach'. –
Sì. È possibile aggiungere l'oggetto semplicemente dichiarando e si può anche estendere l'Array utilizzando Array.prototype
var j = new Array();
j.yourprop = "foo";
' var j = []; 'è più bello. – ThiefMaster
Sì, sono d'accordo il mio modo di fare schifo –
Preferisco 'var j = (function (array) {return new array();} (window.Array))' –
Come condizione altre risposte, è perfettamente possibile, perché gli array in JavaScript sono solo oggetti. Tuttavia, c'è ancora una domanda se sia una buona idea o no.
Questa è una domanda di "stile di codifica", quindi è difficile dirlo obiettivamente, ma Douglas Crockford non ha alcun problema con esso (almeno in alcuni casi). In JavaScript: The Good Parts, in realtà utilizza l'esempio di aggiunta di un metodo "totale" a un array.
Poiché un array è realmente un oggetto, possiamo aggiungere metodi direttamente all'array individuo:
// Give the data array a total function data.total = function() { return this.reduce(add, 0); }; total = data.total(); // total is 108
Poiché la stringa
'total'
non è un intero, aggiunta di una proprietàtotal
ad una matrice non cambia la sua lunghezza
(p62, "JavaScript le parti buone" di Crockford, che si trova sulla Google Books)
Tuttavia, vale la pena ricordare che queste proprietà extra non sono inclusi nella serializzazione JSON, e sarebbero stati gettati via se si fa qualcosa come arr = arr.slice(1);
.
Grazie per aver incluso i riferimenti. –
Inoltre, se l'array passa attraverso i suoi metodi di prototipo (mappa, filtro, ecc.), La proprietà non verrà trasferita al nuovo array, poiché il metodo è stato inserito in un'istanza di 'Array'. Probabilmente previsto ma forse non desiderabile in questo caso? –
Se intendevi nasconderlo in una matrice ecc.? [almeno questo è quello che stavo cercando.]
Object.defineProperty(targ, "myVal", { enumerable: false, writable: true });
La matrice non aggiunge alla lunghezza in modo che sia un non proprietà un valore di I che si potrebbe dire.
Quindi se si desidera vedere le chiavi in un oggetto, ad esempio, Object.keys non lo vedrà, ma Reflect.ownKeys lo farà.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys
La Riflettono versione di defineProperty tornerà successo o fallire, mentre i rendimenti di Object l'oggetto passato.
Ricorda preventEsensioni (come si dice) impediscono a te o ad altri di estenderle. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions
cosa intendete per * "aggiungere proprietà personalizzate senza doverle fare oggetti?" * Le matrici SONO oggetti. Quasi tutto in JS è un oggetto. E quali sono queste proprietà? Puoi spiegare ulteriormente? – Joseph
Loro ** sono ** oggetti. Solo un tipo speciale di oggetti.Ad esempio funzioni simili, che sono anche un tipo speciale di oggetti. – ThiefMaster
Vedere anche [questa domanda correlata] (http://stackoverflow.com/questions/24730145/what-are-the-drawback-of-setting-string-properties-on-arrays) per il motivo per cui non dovresti farlo. –