IE8 查询选择器空值与正常空值
IE8 querySelector null vs normal null
我刚刚在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
null
或Object
,因为它似乎没有继承其instanceOf
值。
它似乎是 JScript 的 IE8 实现中的一个错误(!== ECMAScript ||JavaScript)在他们切换到Chakra引擎时得到了修复。
话虽如此,如果你这样做时很痛,不要那样做。只需检查一下是否document.querySelector() === null
.
希望这能给它带来一些启示。有关更多信息,请参阅链接的答案,他们在解释方面做得很好。
相关文章:
- 如果值为空,如何设置输入的默认值?jQuery
- React 15使用空字符串删除输入值
- 如果用户没有更改,则表单值为空
- 如果值为空或0,如何更改html select标记的边框颜色
- jQuery如果值为空,则将其设置为0并进行验证
- PHP一直告诉我值为空
- AngularJS dropdownlist的第一个值为空
- 我可以让高图表中的数据值为空吗
- 如果值为空,则从对象中删除项
- if子句中的值为空
- ASP.NET 从 JQuery 设置时,服务器端的文本框值为空
- 挖空 + 选择2 -- 设置默认值
- 将挖空单选按钮值的值存储在可观察数组中
- 柴 js 期望属性值为空数组
- 文本区域和 iframe 值为空
- 如果使用 jquery 值为空,则无法为占位符设置值属性
- 如果值为空,ng-model 将从对象中删除元素
- 挖空:属性中的值:标签未回收
- 通过jquery在数据表中设置“搜索框”的值为空
- 对于 ajax GET,值为空