我刚在ie8上发现了非常有趣的行为。原来null并不总是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;
有人能解释一下吗?
发布于 2013-09-13 18:34:45
简·德沃夏克绝对是对的。
根据这个答案的说法,null
是本机对象,querySelector
是宿主对象。
ECMA规范中没有很好地定义宿主对象行为,因此它的行为取决于实现,而IE8和IE10有不同的JScript实现,这就是为什么即使在"IE8模式“中IE10中的JavaScript引擎处理对象的方式也不同(而且更好)。这个特定实现中的特定主机对象似乎违反了Sec 4.3.8的要求,即它的prototype
为null
或Object
,因为它似乎没有继承它的instanceOf
值。
这似乎是JScript的JScript实现(!== ECMAScript小姐)中的一个bug,当他们切换到脉轮发动机时,这个bug是修复的。
所有这些都是这样说的,如果你那样做会很痛苦,那就别那么做。检查一下是否是document.querySelector() === null
。
希望能给它一些启示。更多信息,见链接答案,他们做了很好的解释。
https://stackoverflow.com/questions/18721969
复制相似问题