La sintassi è sbagliata... o meglio, non ci sono errori sintattici ma il modo con cui vuoi definire un array multidimensionale non è quello. Non devi usare la virgola per definire i vari indici degli array annidati, ma devi inserirli ognuno tra le proprie parentesi quadre. Nella tua precedente discussione (anche se chiedevi una diversa cosa) forse ti sei avvicinato di più a livello di sintassi.
Ci sono comunque varie cose che forse è meglio chiarire.
Prima cosa:
in JavaScript l'indice degli array è a base 0 (zero). Se la tua variabile nome è definita come classe di un oggetto array, il primo elemento sarà nome[0]. Chiaramente questo non pregiudica il fatto che tu abbia valorizzato gli elementi a partire dall'indice 1, ma ovviamente avrai un primo elemento praticamente vuoto.
Puoi verificare eseguendo qualche log.
In fase di debug e di verifica, consiglio di utilizzare console.log() anziché alert(). Dalla console del tuo browser (accessibile premendo F12 e selezionando la scheda "console") puoi quindi vedere cosa ti viene restituito. Questo ti permette anche di "esplorare" eventuali oggetti strutturati, come nel caso di un array, dove puoi vederene le sue proprietà attraverso gli strumenti di ispezione, diversamente dall'alert con cui invece viene restituito del semplice testo.
Esempio:
codice:
var nome = new Array();
nome[1]="pippo";
nome[2]="pluto";
console.log(nome);
Nella console sarà mostrata una cosa di questo tipo:
[object Array]: [undefined, "pippo", "pluto"]
Ciò che viene mostrato in console può variare a seconda del browser usato ma il discorso non cambia. Il tuo array avrà una lunghezza di 3 elementi dove il primo (con indice 0) risulterà non definito.
Seconda cosa:
Per restituire o impostare il valore di un elemento dell'array puoi usare vari metodi. Nel tuo caso stai utilizzando le parentesi quadre [] per specificare l'indice. Tra le parentesi deve essere messo un singolo valore numerico (o un'espressione che restituisca un valore numerico). Tu invece hai inserito un'espressione di questo genere - (1,1) - pensando erroneamente di definire un array multidimensionale. Cosa sta avvenendo invece nel tuo script e perché viene restituito quel valore da te inatteso?
E' presto detto. Prova a fare un semplice log con questa espressione e vedi cosa viene restituito:
codice:
console.log( (1,1) ); // restituisce: 1
console.log( (1,2) ); // restituisce: 2
console.log( (2,1) ); // restituisce: 1
console.log( (2,2) ); // restituisce: 2
In una normale espressione, se usi la virgola per separare dei valori (che siano numeri o altro), viene restituito solo l'ultimo valore specificato.
Esempio:
codice:
console.log( (1,2,3,"stella") ); // restituisce l'ultimo valore: "stella"
Occhio, parlo di valore restituito da un'espressione e non di altri casi come ad esempio la definizione di argomenti in una funzione, in cui appunto si utilizza la virgola come separatore. Anche per questo motivo in questo caso è necessario racchiudere l'espressione tra parentesi, perché altrimenti ci sarebbe un conflitto con la definizione degli argomenti che possono essere passati alla funzione console.log(). Ma il discorso non cambia; all'interno delle parentesi quadre nel tuo script, scrivendo - nome[1,1] -, stai definendo una espressione che restituisce un valore. Equivale a scrivere - nome[(1,1)] -, dove l'espressione viene risolta dall'interprete JavaScript il quale restituisce il semplice valore 1.
Nello specifico, scrivere nome[1,1] è lo stesso che scrivere nome[1].
Ma anche scrivere nome[2,1] è lo stesso che scrivere nome[1].
Il tuo script si traduce quindi in una cosa di questo tipo:
codice:
nome[1]="mario";
nome[2]="franco";
nome[1]="tom";
nome[2]="mary";
con la conclusione che tu stai semplicemente sovrascrivendo quei valori ("mario" e "franco") con i nuovi valori ("tom" e "mary") rispettivamente per gli elementi con indice 1 e 2 dell'array nome.
Cosa succede quando viene eseguito questo?
codice:
window.alert("nome italiano selezionato: "+nome[1,1]);
Che l'interprete JavaScript, risolvendo l'espressione, lo traduce in questo:
codice:
window.alert("nome italiano selezionato: "+nome[1]);
dove nome[1] non è altro che "tom", cioè l'ultimo valore definito per quell'elemento.
Terza cosa:
Per definire un array, così come per un array di array, esistono vari modi... ma non quello che hai usato tu.
Vedi documentazione https://developer.mozilla.org/it/doc...ed_collections
Per definire il tuo array bidimensionale potresti usare una cosa del genere:
codice:
var nome = [
["mario", "franco"],
["tom", "mary"]
];
per cui il tuo alert sarà:
codice:
window.alert("nome italiano selezionato: "+nome[0][0]);
dove sarà restituito giustamente il valore "mario".