我刚刚在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;
有人对此有解释吗?
答案 0 :(得分:6)
所以,Jan Dvorak绝对是对的。
根据this answer,null
是本机对象,querySelector
是宿主对象。
主机对象行为在ECMA specification中没有很好地定义,所以它的行为取决于实现,IE8和IE10有不同的JScript实现,这就是为什么,即使在“IE8模式”中的JavaScript引擎也是如此IE10以不同方式处理对象(并且更好)。看来这个特定实现中的这个特定主机对象违反了Sec 4.3.8,要求它prototype
为null
或Object
,因为它似乎没有继承它{ {1}}值。
它似乎是IE8实现JScript(!== ECMAScript || JavaScript)中的错误,当它们切换到Chakra engine时已修复。
所有这一切,如果你这样做会伤害,不要这样做。只需查看是否instanceOf
。
希望能够对此有所了解。有关详细信息,请参阅链接的答案,他们做了很好的解释。