Это потому, что for...in
только итерации свыше перечислимые свойства своей цели. Перечислимость - это атрибут, который свойства могут иметь или не иметь (наряду с возможностью записи и конфигурируемости); те, у кого его нет, не будут выставлены for...in
, хотя они, конечно, все еще существуют на объекте.
MDN говорит, что это для for...in
:
А при ... в цикле не перебрать, не перечислимых свойств. Объекты, созданные из встроенных конструкторов, таких как Array и Object, имеют унаследованные неперечислимые свойства Object.prototype и String.prototype, которые не перечислены, например метод String indexOf или метод toString объекта. Петля будет перебирать все перечислимые свойства объекта или что он наследует от своего прототипа конструктора (включая любые, которые перезаписывают встроенные свойства ).
С другой стороны, in
не принимает во внимание перечислимости и поэтому возвращает true
если свойство существует без дальнейшего обсуждения.
это работает для меня – mgraph