一位同事向我展示了以下代码,并问我为何有效。
<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这样的东西失败了。编写依赖于这种被认为是不好的做法的代码,因为它对执行环境做了太多假设吗?
上述任何浏览器都会失败,或者这被认为是全面的标准行为?
有谁在这里知道这些问题的答案,并愿意启发我吗?我尝试了一个快速的互联网搜索,但我承认我不确定如何正确地说出查询。欢迎提供参考文献和文件。