Ты не прав, бро.

Код AS3:
var hash:Object = { obj: { obj: { value: 5 } } };
trace(hash.obj.obj.value);
var i:int;
var count:int = 1000000;
var value:int;
var startTime:int;
startTime = getTimer();
i = count;
while (i--) {
try {
value = hash.obj.obj.value;
}
catch (error:Error) {
}
}
trace("Hit try: ", (getTimer() - startTime));
startTime = getTimer();
i = count;
while (i--) {
try {
value = hash.obj.noObject.value;
}
catch (error:Error) {
}
}
trace("Miss try: ", (getTimer() - startTime));
startTime = getTimer();
i = count;
while (i--) {
value = getProperty(hash, "obj.obj.value");
}
trace("Hit getProperty: ", (getTimer() - startTime));
startTime = getTimer();
i = count;
while (i--) {
value = getProperty(hash, "obj.noObject.value");
}
trace("Miss getProperty: ", (getTimer() - startTime));

Код:
Hit try: 213
Miss try: 9182
Hit getProperty: 7639
Miss getProperty: 9738
К тому же, твой getProperty возвращает null если объект не найден. А если он найден, но его значение - null?