Ответ на @Vishwas G (не комментарий, потому что блоки кода не поддерживаются в комментариях):
Как указал Даниэль, если объект "a" в вашем примере не существует в первую очередь, ваша попытка получить доступ к "b" на "a" приведет к ошибке. Это происходит в тех случаях, когда вы ожидаете глубокую структуру, такую как объект JSON, который может, например, иметь формат «content.social.avatar». Если «social» не существует, то попытка доступа к «content.social.avatar» приведет к ошибке.
Вот пример общего случая теста существования свойства глубокой структуры, где «неопределенный» подход может вызвать ошибку в случаях, когда подход «hasOwnProperty ()» не делает:
// Missing property "c". This is the "invalid data" case.
var test1:Object = { a:{b:"hello"}};
// Has property "c". This is the "valid data" case.
var test2:Object = { a:{b:{c:"world"}}};
Теперь тесты ...
// ** Error ** (Because "b" is a String, not a dynamic
// object, so ActionScript's type checker generates an error.)
trace(test1.a.b.c);
// Outputs: world
trace(test2.a.b.c);
// ** Error **. (Because although "b" exists, there's no "c" in "b".)
trace(test1.a && test1.a.b && test1.a.b.c);
// Outputs: world
trace(test2.a && test2.a.b && test2.a.b.c);
// Outputs: false. (Notice, no error here. Compare with the previous
// misguided existence-test attempt, which generated an error.)
trace(test1.hasOwnProperty("a") && test1.a.hasOwnProperty("b") && test1.a.b.hasOwnProperty("c"));
// Outputs: true
trace(test2.hasOwnProperty("a") && test2.a.hasOwnProperty("b") && test2.a.b.hasOwnProperty("c"));
Обратите внимание, что родственный язык ActionScript JavaScript не будет генерировать ошибку в примере test1. Однако, если вы расширите иерархию объектов еще на один уровень, вы также столкнетесь с ошибками в JavaScript:
// ** Error (even in JavaScript) ** because "c" doesn't even exist, so
// test1.a.b.c.d becomes an attempt to access a property on undefined,
// which always yields an error.
alert(test1.a.b.c.d)
// JavaScript: Uncaught TypeError: Cannot read property 'd' of undefined