IE8 querySelector null vs normal null

时间:2013-09-10 14:43:03

标签: javascript internet-explorer-8

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

// 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;

有人对此有解释吗?

1 个答案:

答案 0 :(得分:6)

所以,Jan Dvorak绝对是对的。

根据this answernull是本机对象,querySelector是宿主对象。

主机对象行为在ECMA specification中没有很好地定义,所以它的行为取决于实现,IE8和IE10有不同的JScript实现,这就是为什么,即使在“IE8模式”中的JavaScript引擎也是如此IE10以不同方式处理对象(并且更好)。看来这个特定实现中的这个特定主机对象违反了Sec 4.3.8,要求它prototypenullObject,因为它似乎没有继承它{ {1}}值。

它似乎是IE8实现JScript(!== ECMAScript || JavaScript)中的错误,当它们切换到Chakra engine时已修复。

所有这一切,如果你这样做会伤害,不要这样做。只需查看是否instanceOf

希望能够对此有所了解。有关详细信息,请参阅链接的答案,他们做了很好的解释。