Dunque la faccenda sta così:Originariamente inviato da Vindav
perche fai: typeof window[variabile] == 'undefined' ?
per quanto ne so typeof variabile == 'undefined' funziona benissimo...
non possiamo contare solo sul passaggio della variabile, poichè il passaggio avviene per valore: quindi incappiamo nel problema suddetto nel caso la variabile rechi come valore qualcosa di leggibile come false: false, NaN (per quanto NaN viene letto come typeof 'number'!) , null, 0, ''.
A questo punto gli passiamo il nomde delle variabili come stringa - cioè se la variabile è
var foo=0
noi passiamo:
'foo'
A questo punto siccome si tratta di una stringa, non è più leggibile come variabile (proprio perchè è una stringa, e non più una variabile).
Tuttavia, essendo una stringa, è idonea a fungere come chiave di una array associativa.
Ora, siccome tutte le variabili che hanno scope window sono oggetti della window, sono anche accessibili come chiavi dell' oggetto window.
Infatti dire
foo
o window.foo
sarebbe lo stesso.
Ebbene
window.foo
non è altro che la versione object oriented di
window['foo']
Cioè tutti i cosiddetti oggetti in realtà non sono altro che chiavi di array associative.
ps è questo il motivo per cui alle volte nelle documentazioni Microsoft si trova la dizione "collezione" - allude a questo fatto sottostante, son tutte collezioni, tutte aray associative.
Sfruttare questo aspetto fornisce una notevole flessibilità
document['nomeForm']['nomeCampo']['value']
è una espressione legittima: darà il value del nomeCampo nella form nomeForm.
A questo punto le chiavi possono essere passate come variabile che ritorna un valore stringa
variabile='nomeForm';
variabile2='nomeCampo';
document[variabile][variabile2]['value']
per cui diventa possibile parametrizzare un passaggio di stringa come argomento, e accedere agli oggetti indipendentemente dall codifica dei loro name nel body delle funzioni

Rispondi quotando