DOM元素通过其ID附加到窗口对象 - 预期的行为?

时间:2011-03-16 21:00:34

标签: javascript html dom

  

可能重复:
  IE/Chrome: are DOM tree elements global variables here?

我偶然发现了一个奇怪的问题(Stack Overflow JavaScript和某人正在运行的用户脚本的组合),我可以追溯到用户脚本正在访问不再存在的变量的事实(因为我们制作了) SO JS中的一些变化。

但是这个变量实际上是返回一个DOM元素而不是undefined /抛出错误,而该元素碰巧有变量的名称作为元素ID。

我确定这是一个Chrome错误,并且即将提交报告,所以我测试了其他浏览器,只是发现它们表现出相似但不相同的行为。

测试用例:

<body id="a-b-c">
<div id="something"></div>
something has type <script>document.write(typeof something)</script><br>
window["a-b-c"] has type
    <script>document.write(typeof window["a-b-c"])</script><br>
window.hasOwnProperty("something") is
    <script>document.write(window.hasOwnProperty("something"))</script><br>
something === document.getElementById("something") is
    <script>document.write(something === document.getElementById("something"))</script><br>
</body>

输出:

火狐:

  

某物具有类型对象
  window [“a-b-c”]的类型为undefined
  window.hasOwnProperty(“something”)是真的   某事=== document.getElementById(“something”)是真的

IE8:

  

某物具有类型对象
  window [“a-b-c”]具有类型对象
  window.hasOwnProperty(“something”)是
  某事=== document.getElementById(“something”)是真的

铬:

  

某物具有类型对象
  window [“a-b-c”]具有类型对象
  window.hasOwnProperty(“something”)是假的   某事=== document.getElementById(“something”)是真的

Safari浏览器/歌剧:

  

某物具有类型对象
  window [“a-b-c”]具有类型对象
  window.hasOwnProperty(“something”)是真的   某事=== document.getElementById(“something”)是真的

所以我的问题:

  • 这种行为是在任何地方定义的吗?
  • 如果是这样,哪个浏览器正在做对吗?
  • 是否存在实际有用的情况?我只能提出创建的问题,但实际上没有解决

0 个答案:

没有答案