Newsgroup: it.comp.lang.javascript
Titolo: for...in Statement???

Ciao a tutti,
sto scrivendo una pagina in asp che nn vuole saperne di funzionare
correttamente, ma sono sicuro che il problema sia la parte che ho
scritto in JavaScrpt quindi posto qui la mia richiesta.
ho trovato questo codice asp che utilizza vbscript
<%
for each wow in Request.ServerVariables
Response.Write("<li>"&wow&": "&request.serverVariables(wow))
next
%>
e volevo riutilizzarlo usando JavaScript, ci ho provato:
<%
for (wow in [Request.ServerVariables]) {
	Response.write("<li>"+wow+": "+Request.ServerVariables(wow));
}
%>
mentre lo script originale funziona assegnando tutte le variabile
recuperabili dall'oggetto ServerVariables, in quello che ho riscritto
viene assegnato a "wow" il valore "0" esegue lo statement ed esce
subito dal ciclo!
dove sbaglio?
come posso risolvere il problema?
Mi sono documentato sul VBScript tutorial della microsoft ed ho
trovato questo:
For Each...Next Statement 
Description
	Repeats a group of statements for each element in an array or
collection.
Syntax:
	For Each element In group
	    [statements]
	    [Exit For]
	    [statements]
	Next [element]
element
	Variable used to iterate through the elements of the
collection or array. For collections, element can only be a Variant
variable, a generic Object variable, or any specific Automation object
variable. For arrays, element can only be a Variant variable. 
group
	Name of an object collection or array. 
statements
	One or more statements that are executed on each item in
group. 
Sul tutorial JavaScriptho trovato questo:
for...in Statement
Description
	Executes a statement for each element of an object or array. 
Syntax
	for (variable in [object | array])
	    statement 
variable
	A variable that can hold any of the elements of object.
 
object, array
	An object or array over which to iterate. 
statement
	The statement to be executed for each member of object. Can be
a compound statement. 
PauloX

 %>
Prova cosě:
for (i = new Enumerator(Request.ServerVariables); !i.atEnd(); i.moveNext())
   Request.Write(i.item() + ": " + Request.ServerVariables(i.item())
Infatti Request.ServerVariables č un oggetto "alieno" a JavaScript, 
infatti facendo:
typeof Request.ServerVariables
dovrebbe restituire "unknown". Si utilizza quandi l'oggetto Enumerator 
per iterare sugli elementi della collezione ServerVariables.
Gaetano Bigliardi

Infatti Request.ServerVariables è un oggetto "alieno" a JavaScript, 
sei veramente grande ... non ne sarei venuto mai a capo da solo!
per la pubblica utilià posto il codice "collaudato":
<%
for (i=new Enumerator(Request.ServerVariables); !i.atEnd();
i.moveNext())
   Response.Write("<li>"+i.item() + ": " +
Request.ServerVariables(i.item()));
%>
l'ultimo dubbio che  mi resta è:
- perchè in vbscript il "for each in" riesce ad iterare su
"ServerVariables" mentre JavaScript no?
Ho rpovato quindi a fare:
for (wow in navigator) {
	document.write("<li>"+wow+": "+navigator.wow);
}
ma ricevo per esempio:
appCodeName: undefined
perchè non riesco a recuperare il valore corrispondente?
PauLoX

 perchè non riesco a recuperare il valore corrispondente?
Qui stai chiedendo se l'oggetto navigator ha una proprietà wow. Invece 
devi utilizzare la variabile wow, che è una stringa:
for (wow in navigator) {
   document.write("<li>"+wow+": "+navigator[wow]+</li>);
}
Infatti ad esempio per reperire la proprietà appCodeName hai a 
disposizione antrambe le sintassi:
navigator.appCodeName
oppure
navigator["appCodeName"]
Gaetano

 perchč non riesco a recuperare il valore corrispondente?
Devi usare navigator[wow] perche' wow e' una stringa che contiene il nome
della proprieta'.
Come hai scritto tu ad ogni iterazione del ciclo viene stampato a schermo il
valore della proprieta' wow che, non esistendo, assume un valore undefined.

WSH.
mi chiedo perchè microsoft attui sempre questa politica in tutti i
campi: modifichiamo di poco quello che esiste già e la rimarchiamo
Mricsoft.
sapevo del J++ che altri non è che Java "reimpastato", adesso anche la
sottile differenza tra JavaScript e JScript ...
sinceramente non ero cosciente di questa differenza.
adesso capisco perchè tantissimi Jscript girino su IE e non su Mozilla
o NN, oppure abbiano effetti differenti sui vari browser ...
adesso so chi "maledire" quando apro le mie pagine su altri browser
che non siano IE e vedo che non vanno.
secondo voi la cosa migliore e testare tutto direttamente su Mozilla,
nonostante la maggior parte degli effettivi utenti delle pagine
utilizzino IE?
scusa la divagazione!
PauLoX

 utilizzino IE?
A mio parere è meglio testare sul più alto numero di browser, o su un 
numero ragionevole di browser. Utilizzando il più possibile il DOM W3C 
se disponibile. Anche Interner Explorer utilizza il DOM W3C ma non lo 
implementa totalmente, e comunque presenta molteplici estensioni degli 
standard (non so se anche altri possono confermare questa mia affermazione).
Per informazioni sul DOM W3C:
http://www.w3.org/DOM/
Gaetano