Тестирование на неопределенные и нулевые дочерние объекты в ActionsScript / Flex - PullRequest
2 голосов
/ 20 мая 2010

Я использую этот шаблон для проверки неопределенных и нулевых значений в 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 ]

3 голосов
/ 20 мая 2010

Вы получаете эту ошибку, потому что тип объекта не имеет дочернего свойства. Вам нужно сделать что-то вроде этого:

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

Дополнительная информация о методе hasOwnProperty в классе Object: http://livedocs.adobe.com/flex/3/langref/Object.html#hasOwnProperty%28%29

2 голосов
/ 20 мая 2010

Это происходит, когда 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;
}
0 голосов
/ 20 мая 2010

Вы можете избежать ошибок ссылок, используя обозначение массива:

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

Важно понимать, что простое избежание ошибки может привести к возникновению проблем - отладка будет сложнее в более крупных приложениях.

Конечно, идеальный подход состоит в том, чтобы полностью избежать ситуации, используя функции валидатора, чтобы гарантировать, что у вас есть правильные данные, вместо проверки на ноль, когда данные требуются. :)

...