2010-02-20 85 views
6

我想知道是否存在Javascript變量。這是我到目前爲止這是從不同的論壇拼湊起來:找出變量是否存在

function valueOfVar(foo){ 

    var has_foo = typeof foo != 'undefined'; 

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

} 

請注意,我想在一個 字符串FOO通過。例如:valueOfVar(box_split [0] + '_ 2')

現在,我不認爲這個工程,因爲它在某些變量甚至不存在返回true。事實上,它似乎總是迴歸真實。

JQuery的實現工作也將是偉大的,因爲我利用這一點。

感謝所有的幫助

回答

6

你的意思是這樣的嗎?

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

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

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

如果你想能夠處理局部變量,你必須做一些事情很奇怪的是這樣的:

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

它仍然在所有情況下都返回true! – Abs 2010-02-20 23:11:11

+0

我不在Chrome的Javascript控制檯中測試它。你如何測試它? – Rich 2010-02-20 23:13:06

+0

是的,它的工作!太棒了!錯誤是我只是沒有改名爲foo ...我使用的變量。謝謝Rich。 :) – Abs 2010-02-20 23:22:59

1

的問題與您valueOfVar(box_split[0]+'_2')的測試是要附加一個字符串未定義的屬性。您將始終將一個字符串傳遞給valueOfVar(),值爲'undefined_2'

你會發現,typeof運算符將返回'string'如果您嘗試以下方法:

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

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

typeof運營商將努力爲這些類型的測試,但你不能附加任何東西到未定義的變量,否則它會測試總是對的:

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

box_split [0]被定義。你爲什麼認爲這是未定義的?它具有「chk」的值。 – Abs 2010-02-20 23:19:59

0

不知道這是否解決您的問題,但在JavaScript中,空是與undefined不一樣。如果未定義變量,則您編寫的代碼對於測試是正確的。 IE:

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

順便說一句,null的類型是「object」。