找出变量是否存在

时间:2010-02-20 22:52:11

标签: javascript jquery

我想知道是否存在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实现也很棒。

感谢大家的帮助

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

valueOfVar(box_split[0]+'_2')测试的问题在于您要将字符串附加到undefined属性。您将始终将字符串传递给valueOfVar(),其值为'undefined_2'

如果您尝试以下操作,您会注意到typeof运算符将返回'string'

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

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

typeof运算符可以用于这些类型的测试,但是你不能向未定义的变量添加任何内容,否则它将始终为true:

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

答案 2 :(得分:0)

不确定这是否解决了您的问题,但在JavaScript中,null与undefined不同。如果未定义变量,您编写的代码对于测试是正确的。 IE:

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

顺便说一下,null的类型是“object”。