大家好,我卡颂。
依据ES标准规定,所有非原始类型的对象
转化为Boolean
都为true
:
然而这里有个特例:document.all
本文就来聊聊这个冷常识。
document.all的作用
document.all
会返回一个HTMLAllCollection
汇合,蕴含document
下所有节点。能够了解为是一个蕴含页面中所有DOM节点的汇合:
晚期的web
开发者用该API
获取DOM节点
,比方:
// 获取页面中第一个节点,即HTMLdocument.all[0];// 获取页面中id为"abcd"的节点document.all["abcd"];
随着WEB
倒退,其作用曾经逐步被document
的其余办法取代,比方:
- getElementById
- querySelector
......
负重前行的W3C
尽管有了更好用的API
,但很多老页面还在应用document.all
。如何更好的过渡呢?
为了兼容,很多开发者会写出如下代码:
if (document.all) { // 老浏览器} else if (document.getElementById) { // 反对getElementById的古代浏览器}
问题是,很多古代浏览器也实现了document.all
,这就会让代码在所有浏览器中都进入老浏览器的逻辑。
从09年6月到10月,对于document.all
的W3C邮件列表有56封之多。
最初的探讨后果是:在古代浏览器中,document.all
转化为Boolean
的后果为false
。
这样,上述代码在古代浏览器下就不会进入老浏览器的逻辑。
总结
除了以上个性,document.all
还有些异于常人的个性,比方:
- 当被作为
==
和!=
操作符的比拟对象时,会被当作undefined
typeof document.all === 'undefined'
这些乖僻后果都是为了浏览器向下兼容。尽管很多古代浏览器都反对document.all
,但他曾经从规范中删除。
我能想到他以后惟一的作用,大略就是和面试官抬杠吧......
欢送退出人类高质量前端框架群,带飞