Quando si utilizza questo costrutto:
for (var name in namesArray) {
il valore di name
sarà l'indice nella matrice (il nome della proprietà). Se si desidera che il valore effettivo della matrice, è necessario utilizzare quel nome di proprietà/indice per ottenere il valore:
document.write(namesArray[name]);
Naturalmente, davvero non dovrebbe scorrere gli array in questo modo, in primo luogo perché che itera tutte le proprietà enumerabili dell'oggetto array (potenzialmente inclusi gli elementi non dell'array) come si può vedere in this example. Invece, è necessario utilizzare un tradizionale for
ciclo come in questo esempio di codice che segue:
var namesArray = [];
do {
var names = prompt("Enter a name: ");
namesArray.push(names);
} while (names != "")
namesArray.sort();
for (var i = 0; i < namesArray.length; i++) {
document.write(namesArray[i]);
}
Altre opzioni per l'iterazione l'array:
namesArray.forEach(function(value) {
document.write(value)
});
Oppure, in ES6, è possibile utilizzare il for/of syntax che funziona veramente come si stava tentando di utilizzare per l'/ a:
for (let value of namesArray) {
document.write(value);
}
Si potrebbe anche voler capire che usando document.write()
dopo che il documento è già stato analizzato e caricato farà sì che il browser cancelli il documento corrente e ne inizi uno nuovo. Non conosco il contesto più ampio in cui questo codice si adatta, ma ciò potrebbe causare problemi.
Funzionerebbe se fosse un ciclo 'for-of':' for (let name of namesArray) '. – Xufox