我创建了一个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中发挥作用吗?谢谢。
发布于 2012-02-14 09:49:00
您正在尝试检查未定义对象的属性。这没有任何意义。你可以这样写:
alert(isset(a['not']) && isset(a['not']['existent']));发布于 2012-02-14 09:53:44
那是行不通的,你也不能让它起作用。会发生这样的情况: js引擎试图计算‘to’和get's‘’undefined‘,然后尝试计算未定义的属性’存在‘,然后得到该错误。所有这些都发生在之前,调用您的函数.
你能做的是:
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']));(**这只是一个伪代码,您可能需要修改它才能实际工作)
发布于 2012-02-14 09:49:46
测试2不能工作,因为"a' not '“值解析在"isset”函数调用之前,并导致运行时错误。
https://stackoverflow.com/questions/9274674
复制相似问题