Вы не можете полагаться на многое, когда дело доходит до предоставляемых хостом объектов, таких как элементы DOM. Как вы обнаружили, разные хосты могут свободно реализовывать разные вещи.
Отдельно: instanceof
не является надежным кросс- царством . Поэтому, если вы получаете объект (любого типа, а не только предоставленный хостом объект) из другого окна (которое является другой областью), instanceof
, вероятно, завершится ошибкой. Это связано с тем, что instanceof
работает, проверяя цепочку прототипов объекта, на котором вы все это делаете, и выясняя, является ли какой-либо из его прототипов объектом свойства prototype
функции, с которой вы сравниваете его (Element
в вашем примере). Это часть того, почему у нас Array.isArray
, потому что a instanceof Array
завершается неудачно, если массив поступает из другого окна.
Нет причин использовать instanceof
для элемента DOM. Просто используйте элемент. Если вы хотите убедиться, что это элемент, достаточно надежная проверка - a.detail.nodeType === 1
. (Надежно, как в: Это будет работать для любого элемента DOM. Естественно, если кто-то даст вам объект со свойством nodeType
с avlue 1, который не является элементом DOM, он пройдет проверку, но .. .)