在ActionsScript / Flex中测试undefined和null子对象

时间:2010-05-20 00:57:45

标签: flex actionscript-3 if-statement parent-child introspection

我使用此模式在ActionScript / Flex中测试未定义和空值:

if(obj) {
    execute()
}

不幸的是,当我使用模式测试子对象时,总会引发ReferenceError:

if(obj.child) {
    execute()
}

ReferenceError: Error #1069: Property child not found on obj and there is no default value.

为什么使用if语句测试子对象会引发ReferenceError?

谢谢!

3 个答案:

答案 0 :(得分:3)

您收到此错误,因为obj的类型中没有子属性。你需要做这样的事情:

if((obj) && (obj.hasOwnProperty('child') && (obj.child)){
 execute()
}

有关Object类中hasOwnProperty方法的更多信息: http://livedocs.adobe.com/flex/3/langref/Object.html#hasOwnProperty%28%29

答案 1 :(得分:2)

obj是强类型对象但没有child字段时会发生这种情况。

您可以使用in运算符测试任何对象上是否存在字段:

if ("foo" in obj && obj.foo)
    execute();

我还编写了一个实用程序函数来简化这个过程:

function getattr(obj:Object, field:*, dflt:*=undefined):* {
    if (field in obj && obj[field])
        return obj[field];
    return dflt;
}

答案 2 :(得分:0)

您可以使用数组表示法来避免引用错误:

if([obj.name][child.name]){
execute();
}

要意识到的重要一点是,简单地避免错误可能会导致问题失败 - 在大型应用程序中调试会更加困难。

当然,理想的方法是通过使用验证器函数来确保您拥有正确的数据,而不是在需要数据时测试null,从而完全避免这种情况。 :)