我创建了一个 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? 感谢。
答案 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++;
}