Ответ 1
Итак, Ян Дворжак определенно прав.
В соответствии с этим ответом null
- это собственный объект, а querySelector
- объект-хост.
Поведение хост-объекта не определено в спецификации ECMA, поэтому его поведение зависит от реализации, а IE8 и IE10 имеют разные JScript, поэтому даже в режиме "IE8" механизм JavaScript в IE10 обрабатывает объекты по-разному (и лучше). Похоже, что этот конкретный объект-хост в этой конкретной реализации будет нарушать раздел 4.3.8, требуя, чтобы он prototype
был null
или Object
, поскольку он, похоже, не унаследовал его значение instanceOf
.
Кажется, это ошибка в реализации IE8 JScript (! == ECMAScript || JavaScript), которая была исправлена, когда они переключились на Chakra engine.
Все, что сказано, если это больно, когда вы это делаете, не делайте этого. Просто проверьте, есть ли document.querySelector() === null
.
Надеюсь, что это проливает свет на него. Для получения дополнительной информации см. Связанный ответ, они отлично объяснили работу.