Javascript isset函数

时间:2012-02-14 09:43:09

标签: javascript isset

我创建了一个 isset 函数来检查变量是否已定义且不为null。 这是我的代码:

isset = function(a) {
    if ((typeof (a) === 'undefined') || (a === null))
        return false;
    else
        return true;
};
var a = [];

// Test 1
alert(isset(a['not']); // Alerts FALSE -> works OK
// Test 2
alert(isset(a['not']['existent'])); // Error: Cannot read property 'existent' of undefined

是否有任何建议让我的功能适用于测试2? 感谢。

4 个答案:

答案 0 :(得分:4)

您正在尝试检查未定义对象的属性。它没有任何意义。你可以像这样写:

alert(isset(a['not']) && isset(a['not']['existent']));

答案 1 :(得分:3)

不起作用,你不能使它工作。 这是怎么回事: js引擎尝试评估['not']并得到'undefined',然后它尝试评估undefined的属性'existent'并得到该错误。 所有这些都发生在之前调用你的函数......

你可以做的是:

var isset = function(obj, props) {
    if ((typeof (obj) === 'undefined') || (obj === null))
        return false;
    else if (props && props.length > 0)
        return isset(obj[props.shift()], props);
    else
        return true;
};

然后你这样称呼它:

var a = [];

// Test 1
alert(isset(a, ['not']);
// Test 2
alert(isset(a, ['not', 'existent']));

(**这只是一个伪代码,您可能需要稍微修改它才能实际工作)

答案 2 :(得分:1)

测试2不起作用,因为“a ['not'] ['existent']”值解析先于“isset”函数调用,并导致运行时错误。

答案 3 :(得分:0)

嗯,你可以做到这一点:

1)正如我们在php中所做的那样:

$vara = "abc";
$a =0;

 while(isset($vara[a]){
a++;
} 

2)正如我在javascript中所做的那样:

vara = "abc";
 while (vara[a] != null){
a++;
}