2010-02-20 17 views
6

Vorrei sapere se esiste una variabile Javascript. Questo è quello che ho finora che è stato messo insieme da diversi forum:Scopri se esiste una variabile

function valueOfVar(foo){ 

    var has_foo = typeof foo != 'undefined'; 

    if(has_foo){ 
     alert('1 = true'); 
     return true; 
    } 
    else { 
     alert('1 = false'); 
     return false; 
    } 

} 

Si prega di notare, desidero passare in una stringa come foo. Esempio: valueOfVar (box_split [0] + '_ 2')

Ora, non credo che questo funziona perché restituisce vero quando non hanno nemmeno esistono alcune variabili. In realtà, sembra tornare vero tutto il tempo.

Un'implementazione JQuery che funziona sarebbe ottima anche se ne faccio uso.

Grazie a tutti per qualsiasi aiuto

risposta

6

Intendi qualcosa del genere?

function variableDefined (name) { 
    return typeof this[name] !== 'undefined'; 
} 

console.log(variableDefined('fred')); 
// Logs "false" 

var fred = 10; 
console.log(variableDefined('fred')); 
// Logs "true" 

Se si vuole essere in grado di gestire le variabili locali si dovrà fare qualcosa di molto strano in questo modo:

function variableDefined2 (value) { 
    return typeof value !== 'undefined'; 
} 

function test() { 
    var name = 'alice' 
    console.log(variableDefined2(eval(name))); 
    var alice = 11; 
    console.log(variableDefined2(eval(name))); 
} 

test(); 
// Logs false, true 
+0

Restituisce vero su tutti i casi ancora! – Abs

+0

Non funziona quando lo collaudo nella console JavaScript di Chrome. Come lo stai provando? – Rich

+0

Sì, ha funzionato! Fantastico! L'errore è stato che non ho cambiato il nome in foo ... La variabile che stavo usando. Grazie ricco. :) – Abs

1

Il problema con il test valueOfVar(box_split[0]+'_2') è che si sta aggiungendo uno stringa per l'attributo indefinito. Passerai sempre una stringa a valueOfVar() con il valore di 'undefined_2'.

Si noterà che l'operatore typeof tornerà 'string' se si tenta il seguente:

function valueOfVar(foo){ 
    alert(typeof foo); 
} 

valueOfVar(box_split[0]+'_2'); 

L'operatore typeof avrebbe funzionato per questi tipi di test, ma non è possibile aggiungere nulla al variabile non definita , altrimenti verrebbe sempre true:

if (typeof foo === 'undefined') { 
    // foo does not exist 
} 
else { 
    // it does 
} 
+0

box_split [0] è definito. Perché hai pensato che fosse indefinito? Ha un valore di "chk". – Abs

0

Non so se questo risolve il problema, ma in JavaScript, nulla è non è la stessa cosa di non definito. Il codice che hai scritto è corretto per testare se una variabile non è definita. IE:

<script> 
window.onload = function() 
{ 
    alert(typeof(abcd) == "undefined"); //true 
    abcd = null; 
    alert(typeof(abcd) == "undefined"); //false 
}; 
</script> 

A proposito, il tipo di null è "oggetto".

Problemi correlati