Подтвердить что ты не робот

В ActionScript 3, в чем разница между оператором "in" и методом hasOwnProperty?

Операторы "in" и "hasOwnProperty" выглядят взаимозаменяемыми, но мне интересно, проверяет ли кто-то наследуемые свойства или что-то другое, а другое нет или что-то в этом роде. Меня особенно интересует случай использования этого словаря, но я сомневаюсь, что он отличается от других.

"hasOwnProperty" описан в официальных документах здесь и "in" описан здесь, но если есть разница, я не нашел это очень ясным.

4b9b3361

Ответ 1

Наделение на ценный принятый ответ на самом деле вызвало у меня неприятности. Кажется, что происходит больше, чем различия, связанные с прототипом. Я обнаружил, что

hasOwnProperty не может использоваться, чтобы узнать, присутствует ли ключ в словаре, если эта клавиша является ссылочным типом, но оператор in.

Вот пример, чтобы продемонстрировать.

код:

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");

результаты:

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

Ответ 2

Изменение, которое я знаю о in, ищет цепочку прототипов, а hasOwnProperty нет, большинство разработчиков AS3 не используют прототип, поэтому его не все, что подходит для повседневного использования.