Chrome控制台为何不显示document对象的属性与方法?
关于控制台中window.document显示的疑问解答
嘿,这个问题我刚接触DOM的时候也困惑过,给你慢慢捋清楚:
#document是啥?
这只是浏览器控制台给Document对象的「简化显示标签」而已,不是说这个对象真的没有属性和方法。因为Document对象直接关联着整个页面的DOM树,控制台默认会优先展示它对应的文档节点结构(就是你展开后看到的HTML元素),而不是把所有属性方法一股脑列出来——毕竟Document的属性方法太多了,全展示出来反而不利于你快速查看页面结构。为什么直接打印看不到方法,但输入document.有提示?
控制台的自动补全提示(就是你打document.时弹出的列表)是直接遍历了Document对象的自身属性+原型链上的所有方法/属性,所以能把所有可用的API都列出来。但当你直接回车打印window.document时,控制台用了「DOM节点视图」来展示它,默认隐藏了那些方法和属性。要是你想看到它完整的属性方法列表,试试在控制台输入
console.dir(window.document),这个命令会强制控制台用普通对象的属性视图来展示,这样你就能看到getElementById、querySelector、createElement这些所有的方法和属性啦。额外补充:Document对象本身继承了
Node、EventTarget等多个接口,很多常用方法其实是在它的原型链上的,控制台默认打印DOM节点时不会展开原型链,但自动补全的时候会去检索原型链,所以才会出现你看到的“显示不一致”的情况。
内容的提问来源于stack exchange,提问作者ezio




