Почему такие разные результаты?
1)

Код AS3:
public function Main():void
{
var d:Dictionary = new Dictionary();
d["key"] = "dic";
trace(d["key"]); //dic
trace(d.hasOwnProperty("key")); //true
}
2) this можно заменить на любой объект, результат тот же

Код AS3:
public function Main():void
{
var d:Dictionary = new Dictionary();
d[this] = "dic";
trace(d[this]); //dic
trace(d.hasOwnProperty(this)); //false
}