IE8 查询选择器空值与正常空值

IE8 querySelector null vs normal null

本文关键字:空值 常空值 查询 选择器 IE8      更新时间:2023-09-26

我刚刚在ie8中发现了非常有趣的行为。事实证明,空并不总是空。

// just normal, casual null hanging out in the sun
var nullA = null;
// query for non existing element, should get null, same behaviour also for getElementById
var nullB = document.querySelector('asdfasfdf');
// they are equal
console.log(nullA === nullB);
// false
nullA instanceof Object;
// will throw 'Object expected' error in ie8. Black magic
nullB instanceof Object;

有人对此有解释吗?

所以

,扬·德沃夏克绝对是对的。

根据这个答案,null是本机对象,querySelector是主机对象。

宿主对象行为在 ECMA 规范中没有很好地定义,所以它的行为取决于实现,IE8 和 IE10 有不同的 JScript 实现,这就是为什么即使在"IE8 模式"下,IE10 中的 JavaScript 引擎也以不同方式(并且更好)处理对象。似乎这个特定实现中的这个特定主机对象违反了第 4.3.8 节,该节要求prototype nullObject,因为它似乎没有继承其instanceOf值。

它似乎是 JScript 的 IE8 实现中的一个错误(!== ECMAScript ||JavaScript)在他们切换到Chakra引擎时得到了修复。

话虽如此,如果你这样做时很痛,不要那样做。只需检查一下是否document.querySelector() === null.

希望这能给它带来一些启示。有关更多信息,请参阅链接的答案,他们在解释方面做得很好。