Respuesta a @Vishwas G (no un comentario, porque los bloques de código no se admiten en los comentarios):
Como Daniel señaló, si el objeto "a" en su ejemplo no existe en primer lugar, su intento de acceder a "b" en "a" causará un error. Esto sucede en casos donde se espera una estructura profunda, como un objeto JSON que podría, por ejemplo, tener el formato "content.social.avatar". Si "social" no existe, entonces intentar acceder a "content.social.avatar" causará un error.
Aquí está un ejemplo-caso general de una prueba de la propiedad-existencia-estructura profunda donde el enfoque "indefinido" puede causar un error en los casos en que el "hasOwnProperty()" enfoque no:
// 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"}}};
Ahora las pruebas ...
// ** 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"));
Tenga en cuenta que el lenguaje de hermanos de ActionScript JavaScript no generaría un error en el ejemplo de prueba1. Sin embargo, si extiende la jerarquía de objetos un nivel más, también encontrará errores en 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
esto puede causar errores si no existe en primer lugar. Vería el error si está creando un objeto dinámicamente como buscar un ["b"] en 'var a: Object = {a: '1'}' – Daniel
(Esto no funciona) – Lego
var a; a = a {a: 1}; trace (a ["b"]), genera "undefined", pero no genera ningún error. Entonces, ¿dónde está el problema en el uso de esta manera? –