Il costrutto for/in
Il costrutto for/in permette di iterare sulle proprietà di un oggetto javascript.
Comunemente il costrutto for è utilizzato per iterare sugli elementi di un array:
1 var array = new Array(); 2 array = [ "Gianluigi", "Antonio", "Luca"] 3 4 for( var i = 0; i < array.length; i++ ) { 5 6 alert( array[i] ); 7 8 }
Questo ciclo ci stamperà a video i valori contenuti nell’array. Analogamente il costrutto for/in può accedere alle proprietà di un oggetto:
1 var obj = new Object(); 2 obj.nome = "Pato"; 3 obj.squadra = "Milan"; 4 obj.ruolo = "Attaccante" 5 6 for( var prop in obj ) { 7 8 alert( prop ); 9 alert( obj[prop] ); 10 11 }
Il primo alert di questo ciclo stampera il nome della proprietà, quindi alla prima iterazione stamperà “nome”, poi “squadra” e “ruolo”. Mentre il secondo alert stamperà il valore corrispondente quindi “Pato”, poi “Milan” e infine “Attaccante”.
Da tener presente però che NON è detto che l’ordine delle proprietà di un oggetto all’interno di un ciclo for/in corrisponda all’ordine dato al momento di dichiarazione delle proprietà. Non è dato sapere l’ordine e può cambiare da broswer a broswer, a seconda delle diverse implementazioni del costrutto.
All’interno del costrutto possiamo utilizzare qualsiasi espressione valida come assegnamento ad una variabile. Nel nostro caso ne abbiamo creata una nuova, ma avremmo potuto utilizzare una qualsiasi altra variabile esistente, una proprietà di un oggetto o addirittura un elemento di un array:
1 var array = new Array(); 2 var i = 0; 3 4 for( array[i++] in obj ) { 5 // .....code... 6 }
Nel caso in cui cancellassimo una proprietà durante l’iterazione, non sarà più accessibile nelle iterazioni successive e non sarà enumerata dal for/in.
Mentre le proprietà di un oggetto javascript definite dall’utente ( comprese quelle ereditate ) sono in genere sempre enumerabili, alcune proprietà possono essere definite ‘non enumerabili’, in modo tale da renderle NON visibili al costrutto for/in.
