A for - in будет проходить через все перечислимые свойства объекта, даже в цепочке прототипов. Функция hasOwnProperty может отфильтровывать те перечислимые свойства, которые находятся в цепочке прототипов. Наконец, функция propertyIsEnumerable может различать перечислимые свойства объекта.
Следовательно, следующее script не должно печатать ничего:
for(a in window)
if(window.hasOwnProperty(a) && !window.propertyIsEnumerable(a))
console.log(a);
В Chrome, однако, вышесказанное печатает много имен свойств.
Почему циклы for - in и propertyIsEnumerable противоречат друг другу в отношении перечислений?