Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    7

    funzione per verificare l'esistenza di variabili

    Salve a tutti,
    so che per verificare l'esistenza di una variabile si usa il type of.

    Per esempio:

    codice:
    if (typeof(miaVariabile) != 'undefined')  ...
    E' possibile creare una funzione che abbia come parametro la variabile della quale verificare l'esistenza?

    Una cosa del genere non funziona:

    codice:
    function controlloVariabili(miaVariabile) {
    if (typeof(miaVariabile) != 'undefined') ...
    }
    perchè nel caso in cui miaVariabile non esista, mi restituisce errore
    D'altronde non posso neanche mettere

    codice:
    function controlloVariabili(type of(miaVariabile)).
    Il mio obiettivo è di passare un array con tutte le var da verificare e restituire false se qualcosa non esiste....

    Grazie

    Rob

  2. #2
    var foo=1;

    function controllo(variabile){
    return (typeof window[variabile] == 'undefined')?false:true;
    }

    alert( controllo('foo') );//foo fra apici

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    perchè nel caso in cui miaVariabile non esista, mi restituisce errore
    non è affatto vero, su che browser ti darebbe errore?
    cmq per vedere se una variabile esiste basta fare cosi:

    codice:
    function controlloVariabili(miaVariabile) {
    	if (miaVariabile) alert("ok");
    	else alert("undefined");
    }

  4. #4
    ps leggo ora che vuoi fare un controllo su variabili multiple. Non passare una array, puoi fare una cosa più facile (specie se un giorno le variabili avessero ad esser stampate server side): passa una stringa con i nomi delle variabili separate da UNO spazio bianco (scrivo di getto non ho testato):

    var foo=1;
    var boh=0;

    function controllo(stringa){
    stringa=stringa.split(' ');
    for(var i=0; i<stringa.length; i++){
    if(stringa[i]/*avessi sbagliato e messo due spazi bianchi...*/ && typeof window[stringa[i]] == 'undefined'){return false;};
    }
    return true;
    }

    alert(
    controllo('foo boh')
    );

  5. #5
    Originariamente inviato da Vindav
    non è affatto vero, su che browser ti darebbe errore?
    cmq per vedere se una variabile esiste basta fare cosi:

    codice:
    function controlloVariabili(miaVariabile) {
    	if (miaVariabile) alert("ok");
    	else alert("undefined");
    }
    Sì è giusto, solo che il problema è che se la variabile passata a miaVariabile detiene come valore qualcosa di idoneo ad essere letto come false (false,null, 0, '') il controllo gli ritornerebbe che la variabile non c'è, mentre la variabile c'è ma con un valore che ritorna false. Cioè la cosa funziona benissimo tranne che in 4 circostanze.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    ma quale sarebbe il browser che da problemi ie? purtrooppo non ho la possibilità di far le prove...

    edit: già è vero non ci avevo pensato, sei sempre un passo avanti

  7. #7
    Originariamente inviato da Vindav
    ma quale sarebbe il browser che da problemi ie? purtrooppo non ho la possibilità di far le prove...

    edit: già è vero non ci avevo pensato, sei sempre un passo avanti
    No è un "errore" comprensibile - ne ho fatti talmente tanti simili che lo trovo normale, specie quando si scrive di getto su un forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    perche fai: typeof window[variabile] == 'undefined' ?

    per quanto ne so typeof variabile == 'undefined' funziona benissimo...

  9. #9
    Originariamente inviato da Vindav
    perche fai: typeof window[variabile] == 'undefined' ?

    per quanto ne so typeof variabile == 'undefined' funziona benissimo...
    Dunque la faccenda sta così:
    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

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    il punto non è quello, lo se che tutti gli elementi html di una pagina sono accessibili anche come array associativi oltre che con il metodo object oriented ma qua stiamo parlando di semplici variabili.

    se io faccio una cosa del genere:

    codice:
    function controlloVariabili(miaVariabile) {
    		if (typeof window[miaVariabile] != 'undefined') alert("ok");
    		else alert("undefined");
    	}
    	var ciao = 0;
    controlloVariabili(ciao);
    temo che mi si presenti l'alert "undefined" mentre la variabile ciao in realtà è valorizzata a 0.
    Tu dici di passare la viriabile come stringa quindi controlloVariabili("ciao"); ma perche complicarsi la vita?
    mi sto perdendo qualcosa? Appena posso faccio un po di prove.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.