In un libro che sto leggendo (JavaScript & JQuery - Interactive Front End di sviluppo da Jon Duckett) c'è un errore interessante o (almeno io la penso così), che non si ferma il codice di lavoro:var i = [0] in un ciclo for, quindi incrementato i ++ - perché funziona?
for (var i = [0]; i < options.length; i++) {
addEvent(options[i], 'click', radioChanged);
}
Questa è una parte dello script che scorre in tutti i pulsanti di opzione in un modulo e allega un listener di eventi (non importa ciò che fa).
Ma ...
Perché i inizializzati come un array a tutti?
Perché l'incremento funziona?
Perché l'intero ciclo funziona?
Ovviamente se si sostituisce var i = [0] con var i = 0 il codice funziona ancora.
Quando si aggiungono alcuni avvisi per controllare il valore di i in ogni iterazione del ciclo e il tipo di i, al secondo tipo di iterazione di i cambia da oggetto (dopotutto nella prima iterazione è un array) a numero. Questa è una specie di conversione di tipo implicita che non ho mai incontrato finora (e Google non aiuta molto). Qualcuno può spiegare cosa sta succedendo sotto il cofano?
for (var i = [0]; i < options.length; i++) {
addEvent(options[i], 'click', radioChanged);
alert(i); // --> 1 2 3 ...
alert(type of i); // --> object number number ...
}
ok, grazie :) quindi immagino sia una specie di piccolo bug ma non un 'errore' ... – Tadek
@Tadek: È più di una caratteristica confusa. La specifica dice questo in modo che l'incremento di "1" risulterebbe in "2" piuttosto che "11". – SLaks