窗口对象在Chrome和IE中行为异常

问题描述

| 考虑以下示例HTML:
<div id=\"about\">
 <!-- content here -->
</div>
和以下脚本
var about = (function ($,window,document) {
    \"use strict\";

     var methods;

     methods = {
        init: function () {
        // Do things here 
        }
     };

     return methods;
} (jQuery,document));
此时应将变量“ 2”附加到“ 3”对象。 在Firefox(3.6.17)中,我可以编写
window[\"about\"] 
如果尚未处理,则将返回
undefined
,如果有,它将按我的预期返回对象。 但是,问题在于,Chrome和IE(7&8)中的相同代码
window[\"about\"]
返回实际的HTML对象。在上面的示例中,它将返回以下内容
    <div id=\"about\">
     <!-- content here -->
    </div>
为什么会这样? 另外,有没有比使用
window
元素更好的方法来检查
about
对象是否可用?我意识到理想情况下,您不想垃圾窗口对象,但这是一个完全不同的问题。 谢谢     

解决方法

WebKit浏览器似乎模仿了旧的IE行为,即将元素“ id”值视为3对象的属性。 我个人不喜欢这种行为。     ,Chrome会将HTML中的所有ID转换为全局变量。您可以覆盖该分配,但是我认为您正在检查是否存在而不是覆盖? http://jsfiddle.net/robert/Hnw7y/     ,区分ѭ11和函数的一种方法是检查对象的类型:
if (typeof window.about === \'function\') {
    // the \'about\' function has been defined
}
    ,不幸的是,您可以执行以下操作的唯一方法是:
function global(name) { return eval(name); }

if( global(\"about\") )
   ...
试试这个:http://jsfiddle.net/PMqPv/1/