window['undefined'] = window['undefined']

作者: 来源: 日期:2009-10-30

在 jquery 中我们见到 window.undefined=window.undefined 的写法,今日又在 ext 中见到 window["undefined"]=window["undefined"],对其写法非常不理解,将自身赋给自身有什么意义,在网上狂搜一番也没有明确的解释,后来看到 ext 注释写了这么一句:for old browsers,很明显是为了兼容老的浏览器,思虑半天,似乎有了些理解。

在较老的浏览器中,如 IE5 之前的浏览器,undefined 并不是 window 对象的一个子对象,并不是一个已实现的系统保留字,而是代表一个未定义类型,除了直接赋值和 typeof() 之外,其它任何对 undefined 的操作都将导致异常。如果需要知道一个变量是否是 undefined,只能采用 typeof() 的方法:如 var v;if (typeof(v) == 'undefined') {// ...}。如果使用 if(a==="undefined") 则会报“undefined 未定义”的错误。

因此为了兼容 IE5 及之前的浏览器,我们可以使用一些方法来解决这个问题。本文前面说到的就是其中一种方式。window.undefined=window.undefined; 咋一看很难理解,写法有点 bt,但理解一下就不觉得奇怪了,在较早的浏览器中因为 window.undefined 不存在所以会返回 undefined,将此赋给等号前的 window.undefined 这样后面就可以直接使用 if(a==="undefined") 的判断方式了。在新版本的浏览器中 window.undefined=undefined;因此不会造成什么负面影响。

除了使用 window.undefined=window.undefined 和 window["undefined"]=window["undefined"] 外,还有很多别的办法来实现对 IE5 及之前浏览器的兼容,如

var undefined = void null; //void 函数永远返回 undefined

var undefined = function(){}();

var undefined = void 0;

只要等号后的表达式返回 undefined 即可。

相关文章