一位同事向我展示了以下代码并问我为什么它有效。
<span id="myspan">Do you like my hat?</span>
<script type="text/javascript">
var spanElement = document.getElementById("myspan");
alert("Here I am! " + spanElement.innerHTML + "\n" + myspan.innerHTML);
</script>
我解释说,当浏览器解析包含对适当 dom 节点的引用的文档时,属性会附加到带有元素 id 名称的窗口对象。这有点像window.myspan = document.getElementById("myspan")
在渲染页面时在幕后调用。
在随后的讨论中,我们提出了几个问题:
窗口对象和大部分 DOM 不是官方 JavaScript/ECMA 标准的一部分,但上述行为是否记录在任何其他官方文献中,可能与浏览器相关?
以上在浏览器(至少是主要竞争者)中有效,因为有一个窗口对象,但在 rhino 之类的东西中失败了。编写依赖于这种被认为是不好的做法的代码是因为它对执行环境做出了太多假设吗?
是否有任何浏览器会出现上述问题,或者这是否被认为是全面的标准行为?
这里有没有人知道这些问题的答案并愿意启发我?我尝试了快速的互联网搜索,但我承认我不确定如何正确表达查询。欢迎提供参考资料和文档。