Confiando en la respuesta valiosamente aceptada en realidad me metió en un poco de problemas. Parece que hay más cosas más que solo diferencias relacionadas con prototipos. Lo que he encontrado es que
hasOwnProperty no se puede utilizar para ver si una clave está presente en un diccionario cuando esa clave es un tipo de referencia, pero el operador in puede hacerlo.
Aquí hay un ejemplo para demostrar.
código:
var test:Function = function(key:*,label:String):void
{
var d:Dictionary = new Dictionary(true);
d[key] = true;
trace(label);
trace(" hasOwnProperty: " + (d.hasOwnProperty(key)?"true":"false <== !!PROBLEM!!"));
trace(" in: " + (key in d));
trace(" []: " + d[key]);
};
test({}, "indexed by object");
test("string", "key is string");
test(0, "key is number");
test(true, "key is boolean");
resultados:
indexed by object
hasOwnProperty: false <== !!PROBLEM!!
in: true
[]: true
key is string
hasOwnProperty: true
in: true
[]: true
key is number
hasOwnProperty: true
in: true
[]: true
key is boolean
hasOwnProperty: true
in: true
[]: true
Y hay más a él todavía. hasOwnProperty no es compatible con la búsqueda estática. Por ejemplo, '** Static properties **' - variables, constantes o métodos definidos con la palabra clave static en la clase de definición de un objeto o en cualquiera de sus superclases; y '** Propiedades de prototipo **' - propiedades definidas en un objeto prototipo que es parte de la cadena de prototipos del objeto. 'devolverá' falso'. –
Otra forma de verlo es 'in' que me indicará si arroja un error si accedo a la propiedad o al método, ya que' hasOwnProperty' no lo hará porque no comprueba si existe la propiedad o el método estático o prototipo. –