Javascript 窗口对象在Chrome和IE中行为奇怪

Javascript 窗口对象在Chrome和IE中行为奇怪,javascript,Javascript,考虑以下示例HTML: <div id="about"> <!-- content here --> </div> 此时应将变量about附加到窗口对象 在Firefox(3.6.17)中,我能够编写 window["about"] 如果about还没有被处理,它将返回未定义的如果有,它将返回我所期望的对象 然而,问题是Chrome和IE(7&8)中的相同代码窗口[“about”]返回实际的HTML对象。根据上面的示例,它将返回以下内容: &l

考虑以下示例HTML:

<div id="about">
 <!-- content here -->
</div>
此时应将变量
about
附加到
窗口
对象

在Firefox(3.6.17)中,我能够编写

window["about"] 
如果about还没有被处理,它将返回未定义的
如果有,它将返回我所期望的对象

然而,问题是Chrome和IE(7&8)中的相同代码
窗口[“about”]
返回实际的HTML对象。根据上面的示例,它将返回以下内容:

    <div id="about">
     <!-- content here -->
    </div>
function global(name) { return eval(name); }

if( global("about") )
   ...

为什么会发生这种情况

另外,与使用
窗口
元素相比,是否有更好的方法来检查和查看
about
对象是否可用?我意识到理想情况下,人们不想把窗口对象弄脏,但这是一个完全不同的问题


谢谢,Chrome将接受HTML中的任何ID,并将其转换为全局变量。您可以覆盖作业,但我假设您正在检查是否存在,而不是覆盖作业


WebKit浏览器似乎模仿了旧的IE行为,将元素“id”值视为
窗口的属性


我个人不喜欢这种行为。

区分
HTMLElement
和函数的一种方法是检查对象的类型:

if (typeof window.about === 'function') {
    // the 'about' function has been defined
}

不幸的是,您可以这样做的唯一方法是:

    <div id="about">
     <!-- content here -->
    </div>
function global(name) { return eval(name); }

if( global("about") )
   ...

试试这个:

而不是窗口['about'],试试
about
+1。“不要污染全局名称空间”的整个想法都付之一炬。因为像
location
document
这样的东西,它甚至不可靠。不喜欢就是低估了我对它的憎恨:)所以如果HTML5规范中有这样的东西。。。您建议我如何检查“about”的存在?您可以随时检查“about”作为DOM元素而不是函数的值。对,它已经存在了,因为Chrome将元素ID作为
window.example=document.getElementById('example')