BOM 不包含 DOM。BOM只负责浏览器相关,比如地址栏、窗口和浏览器信息。DOM 虽然名字是文档对象模型,但其实几乎一切和网站网页相关的东西都属于 DOM,网络请求、存储、通知、HTML 元素等等都归 DOM 管。
至于为什么会有 BOM 包含 DOM 的说法,可能是因为 DOM 的一票接口都在 window 身上,而 window 属于 BOM,所以产生了误解。不过如果按照“BOM 的对象上包含了 DOM 的接口”这种意思来理解倒也没问题,说它不对是因为“BOM 的标准不包含 DOM 的标准”,两种意思要分清楚。而且其实 BOM 没有标准,说一个没有标准的东西包含一个有标准的东西未免有些奇怪吧?
那么为什么 DOM 的接口会出现在 BOM 的 window 身上?只是因为在浏览器里 window 是 JS 的全局对象罢了。一门编程语言总得提供一些基础设施给使用者吧?给的这些东西总得放到使用者方便找的地方吧?那么放到全局对象上不是很合理吗?