为什么dom-elements作为window-object的属性存在?

Nil*_*ils 7 html javascript dom

如果我写这样的HTML:

<div id="foo">Foo<div>
Run Code Online (Sandbox Code Playgroud)

window.foo返回一个dom元素并window.document.getElementById("foo") === window.foo返回true.

这是为什么?为什么每个人都使用getElementById

并在旁注:为什么window.foo在IE7/8中禁止超越?如果我设置会发生什么window.foo = "bar"

Jon*_*Jon 5

我不确定历史的观点,但 HTML 5指定元素是候选者,window如果它们具有属性,则可以直接作为对象的id属性公开:

Window 接口支持命名属性。任何时候支持的属性名称都包含以下内容,按树顺序排列,忽略以后的重复项:

[...]

  • 活动文档中任何具有非空 id 内容属性的 HTML 元素的 id 内容属性值。

这个定义的问题在于它只保证如果有<div id="foo">Foo<div>thenwindow.foo 将被定义。它不保证它的值到底是什么(阅读关于如何确定的规则的规范;例如,它可能返回一个集合)。

所以结果是“为什么使用getElementById曾经?”的答案。很简单:因为您可以依靠它来返回您期望的内容,而无需考虑整个文档。