In JavaScript, gli array sono solo oggetti con alcune proprietà speciali, come un length
proprietà automatico, e alcuni metodi collegate (sort
, pop
, join
, ecc). Infatti, a
non verrà conteggiato nell'array, poiché la proprietà length
di un array memorizza solo la quantità di elementi con un nome di proprietà che può essere rappresentato con un numero intero positivo a 32 bit.
E poiché le matrici sempre definiscono automaticamente ogni elemento numerato fino al massimo elemento con un positivo 32 bit nome proprietà int, ciò significa efficacemente i negozi di proprietà length
1 superiore l'elemento con il massimo intero a 32 bit come nome immobile. Grazie @Felix Kling per avermi corretto su questo nei commenti.
L'aggiunta di proprietà come a
non è vietata affatto, ma è necessario fare attenzione con loro, poiché potrebbe essere fonte di confusione durante la lettura del codice.
C'è anche una differenza di camminare attraverso gli elementi dell'array:
camminare attraverso tutti gli elementi numerati:
for (var i=0; i<myArray.length; i++) {
//do something
}
di camminare attraverso ogni proprietà che non è built-in:
for (var i in myArray) {
//do something
}
Si noti che questo ciclo includerà anche tutto ciò che è incluso da Array.prototype
che non è un metodo integrato. Quindi, se dovessi aggiungere Array.prototype.sum = function() {/*...*/};
, verrà eseguito anche il loop.
per verificare se l'oggetto che si sta utilizzando è effettivamente una matrice, e non solo un oggetto, è possibile eseguire il seguente test:
if (Object.prototype.toString.call(myObject) === '[object Array]') {
//myObject is an array
} else if (typeof myObject === 'object') {
//myObject is some other kind of object
}
Vedi @artem's comment: myObject instanceof Array
potrebbe non funzionare sempre in modo corretto.
Neato. Non sapevo nemmeno che fosse possibile. Ha senso però come un array è solo un oggetto. – iambriansreed