odpowiedź do @Vishwas G (nie komentarzu ponieważ kody nie są obsługiwane w komentarzach):
Jak zauważył Daniel, jeśli obiekt "a" w twoim przykładzie nie istnieje, próba dostępu do "b" na "a" spowoduje błąd. Dzieje się tak w przypadkach, gdy oczekujesz głębokiej struktury, takiej jak obiekt JSON, który może na przykład mieć format "content.social.avatar". Jeśli "społeczność" nie istnieje, próba dostępu do "content.social.avatar" spowoduje błąd.
Oto przykład ogólnego przypadku testu właściwość egzystencji głęboka struktura, gdzie podejście „nieokreślony” może spowodować błąd w przypadkach, gdy „hasOwnProperty()” podejście nie:
// 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"}}};
teraz testy ...
// ** 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"));
Należy zauważyć, że JavaScript języka rodzeństwa ActionScript nie wygenerowałby błędu w przykładzie test1. Jeśli jednak rozszerzysz hierarchię obiektów o jeszcze jeden poziom, możesz również natrafić na błędy w 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
może to spowodować błędy, jeśli nie istnieje. zobaczysz błąd, jeśli dynamicznie tworzysz obiekt, np. szukając ["b"] w 'var a: Object = {a: '1'}' – Daniel
(To nie działa) – Lego
var a; a = a {a: 1}; trace (a ["b"]), wyświetla "undefined", ale nie generuje żadnego błędu. Więc gdzie jest problem z używaniem w ten sposób? –